DynamoDB Streams结合Lambda触发器是否保证无重复?
DynamoDB Streams 重复交付问题的文档冲突解析
文档表述差异的核心原因
- DynamoDB Streams 本身不会在流中产生重复记录,这是流层面的固有保障。
- Lambda作为流的消费者时,无法保证恰好一次交付,重复情况出现在Lambda消费环节,而非流本身。
Lambda消费环节出现重复的原因
Lambda与DynamoDB Streams集成时,若出现以下情况,会触发重试机制导致重复交付:
- 函数执行超时
- 抛出未捕获的异常
- 网络波动导致Lambda未正确反馈处理结果的确认信号
此时DynamoDB Streams会重新推送同一条记录给Lambda,造成重复处理。
Kinesis Adapter的重复风险
使用Kinesis Adapter消费DynamoDB Streams时,重复处理的风险取决于消费端的实现:
Kinesis Client Library(KCL)通过checkpoint机制跟踪消费进度,但如果消费进程意外终止、checkpoint未成功提交,重启后可能会重新处理已消费过的记录。官方文档未提及该点,是因为这属于消费端逻辑需要考量的问题,而非流本身的特性。
结论
两份官方文档均未过时,只是聚焦的层面不同:前者描述的是DynamoDB Streams的生成特性,后者针对的是Lambda消费环节的交付特性。无论采用哪种消费方式(Lambda或Kinesis Adapter),都必须确保业务处理逻辑具备幂等性,以此规避重复处理带来的异常。
内容的提问来源于stack exchange,提问作者Samith Shetty
相关产品推荐
相关产品推荐

