You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFormation更新Lambda Kinesis触发器报分片速率超限如何解决

错误原因分析
  • 报错中出现编号为shardId-000000000004的分片,与你配置的2个分片数量不符,核心原因是该Kinesis流历史上执行过分片拆分操作:拆分后的旧分片默认会保留48小时(标准存储模式)或7天(长期存储模式),即使拆分完成后当前分片总数已调整为2,未过期的旧分片仍属于活跃可读取资源,Lambda事件源映射初始化时会遍历所有活跃分片,拉高了分片读取请求频率。
  • Kinesis单分片默认读取配额为每秒5次GetRecords调用、总数据读取速率2MB/秒,若存在多个消费者同时读取同一分片、或者Lambda初始化时批量扫描大量历史分片,都会触发Rate exceeded限流报错。
  • 当前CloudFormation配置未添加事件源映射的容错、流控参数,遇到限流错误时无重试机制,直接触发资源更新失败。
可行解决方案
  • 先通过AWS CLI执行aws kinesis list-shards --stream-name <替换为你的流名称>查看所有活跃分片,确认是否存在已拆分未过期的旧分片。若存在旧分片,可等待旧分片自动过期后再重新执行CloudFormation更新,也可以通过调整参数临时规避。
  • 在CloudFormation的Lambda事件源映射配置中添加流控、容错参数,优化后的参考配置如下:
LambdaTrigger:
    Type: AWS::Lambda::EventSourceMapping
    Properties:
      StartingPosition: LATEST
      EventSourceArn: !Sub
        - arn:aws:kinesis:${region}:${accountId}:stream/${streamName}
        - region: !Ref 'AWS::Region'
          accountId: !Ref 'AWS::AccountId'
          streamName: !Ref KinesisStreamName
      FunctionName: !Ref KinesisReader
      # 新增流控容错参数
      BatchSize: 100 # 降低单次拉取的记录数,减少单请求对配额的占用
      MaximumBatchingWindowInSeconds: 5 # 拉长拉取时间窗口,平滑请求频率
      MaximumRetryAttempts: 3 # 配置限流错误自动重试次数
      ParallelizationFactor: 1 # 单分片并发消费数设为1,避免多并发拉高读取频率
  • 若需要立即跳过历史分片扫描,可将StartingPosition从LATEST改为AT_TIMESTAMP,指定一个晚于分片拆分完成时间的时间戳,让Lambda直接从新分片的最新位置开始消费。
  • 如果当前Kinesis流的写入压力确实较高,可临时上调分片数,待CloudFormation部署完成后再调回预期的2个分片即可。

内容的提问来源于stack exchange,提问作者pritampanhale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:15:03