连接DynamoDB流的Lambda是否会发送含重叠记录的不同批次?
连接DynamoDB流的Lambda是否会收到重叠但非完全重复的批次?
会的,你描述的这种情况是可能出现的。
DynamoDB流按分片处理记录,每个分片内的记录是有序传递的,但Lambda处理批次时,一旦出现超时、部分处理失败,或者检查点未正确推进到批次末尾的情况,就可能拉取到包含重复记录的非完全重叠批次。
比如你提到的场景,就可能出现这样的调用序列:
- 批次1:
[{"newImage":{"name":"alpha"},"eventId":"01"},{"newImage":{"name":"bravo"},"eventId":"02"}] - 批次2:
[{"newImage":{"name":"bravo"},"eventId":"02"},{"newImage":{"name":"charlie"},"eventId":"03"}]
原因很简单:如果Lambda处理第一个批次时,检查点只更新到了eventId:01之后,那下一次拉取流记录时,会从这个检查点位置重新开始,自然会把未确认处理完成的bravo和后续的charlie打包成新批次发送。
所以编写Lambda处理器时,必须保证逻辑是幂等的——哪怕同一条记录被多次处理,也不会产生重复的业务影响,比如重复写入数据、重复发送通知等。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

