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

Lambda读取DynamoDB流:Concurrent batches per shard配置及相关疑问

DynamoDB流与Lambda并发问题解答

你配置Concurrent batches per shard为1但Lambda出现多实例并发,核心原因是你的DynamoDB表存在多个活跃流分片——这个参数控制的是单分片的并发批次数,总并发数是活跃分片数乘以该参数值,所以多分片会导致多Lambda实例同时运行。

针对你的四个疑问,逐一解答:

1. Concurrent batches per shard与Lambda并发数的关联

  • 该参数限定单个DynamoDB流分片可同时处理的事件批次数,每个批次对应一个Lambda实例。
  • Lambda总并发数 = 当前活跃的DynamoDB流分片数量 × Concurrent batches per shard的配置值。
  • 你设置了1,但如果表有N个活跃分片,Lambda最多会启动N个并发实例,这就是你看到多实例的原因。

2. 单个分片是否包含同一partition key的所有记录?

是的。DynamoDB流的分片严格按partition key划分:同一个partition key的所有变更记录(新增、更新、删除)都会被分配到同一个流分片,绝不会跨分片分布。

3. 单分片包含同一partition key更新记录时,多并发批次的处理顺序问题

  • 当Concurrent batches per shard>1时,单个分片内的不同批次会被多个Lambda实例并行处理,但同一partition key的连续变更记录会被打包进同一个批次,或按时间顺序排列的连续批次中。
  • 针对你提到的同一条记录10次更新的场景:这10次更新会按时间顺序进入同一个分片,DynamoDB流会根据Batch size和Batch window配置,将它们打包成1个或多个连续批次。如果开启多并发批次,这些批次可能被多个Lambda实例并行处理,但同一partition key的记录在批次内是有序的,且批次的整体顺序严格遵循事件发生时间。
  • 要保证绝对的处理顺序,要么将Concurrent batches per shard设为1(强制分片内串行处理),要么在Lambda业务逻辑中实现幂等校验与顺序控制(比如记录每个partition key最后处理的事件序列号,跳过已处理或顺序超前的记录)。

4. 分片是否与sort key有关联?

没有直接关联。DynamoDB流分片的划分仅依据partition key,与sort key无关。同一个partition key下,无论sort key取值如何,所有变更记录都会被分配到同一个分片。

补充:关于你的触发配置

从你提供的配置截图来看,触发规则设置了Batch size为100、Batch window为0,起始位置为Latest。这些配置会影响事件批次的打包逻辑,但不会改变分片与partition key的绑定关系,也不会突破Concurrent batches per shard的单分片并发限制——多Lambda实例运行的核心原因仍是表存在多个活跃分片。

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:23:36