若Lambda处理速度跟不上,DynamoDB Streams中的条目是否会过期?
问题1:是否需要Lambda在24小时内完成全部1000万条记录的处理?
不需要,DynamoDB Streams的24小时过期规则,针对的是还未被任何消费者拉取的流记录。
当你用DynamoDB Streams作为Lambda触发器时,Lambda服务侧会有专属的轮询组件持续拉取流中的记录,只要记录被Lambda的轮询组件拉取走,就不受24小时过期规则限制,哪怕后续函数处理耗时久,也不会因为流过期丢失这部分数据。
你当前的场景下30分钟写入1000万条记录,正常情况下Lambda会根据流的分片数自动扩容并发:DynamoDB每个流分片支持最高1000条/秒的处理吞吐,1000万条记录哪怕只有1个分片,满负载处理也只需要不到3小时,远低于24小时的阈值,正常不会触发过期问题。
问题2:24小时后仍有未处理的流事件,是否会丢失?
分两种情况:
- 如果未处理的事件已经被Lambda轮询组件拉取到了Lambda服务侧,只是因为函数报错、并发不足等原因在排队等待处理,这部分数据不会丢失,Lambda会按照你配置的重试策略、死信队列规则处理这些事件,不受流的24小时过期限制。
- 如果未处理的事件还停留在DynamoDB Streams中,24小时内没有被任何消费者拉取,这部分记录会被DynamoDB自动清理,永久丢失。
风险规避建议
你可以通过CloudWatch监控DynamoDB流的IteratorAge指标,这个指标代表流中最旧的未被消费者拉取的记录的年龄,如果该指标持续上涨、接近24小时阈值,说明流出现了堆积,需要及时排查Lambda函数的报错、调整并发上限或者增加流分片数,避免数据丢失。
内容的提问来源于stack exchange,提问作者SPai
相关产品推荐
相关产品推荐

