Lambda触发DynamoDB流滞后

时间:2019-06-26 22:16:03

标签: amazon-web-services aws-lambda amazon-dynamodb amazon-dynamodb-streams

假设:

让我们假设将数据插入DynamoDB的速度非常快。

上下文:

在DynamoDB表上启用了流,这将触发lambda。 Lambda读取流记录并在弹性搜索中为该记录建立索引。

问题陈述:

将记录插入DynamoDB的时间与通过流记录触发lambda的时间之间存在延迟。这种延迟或滞后一直在增加,并且与插入dynamoDB的数据量成正比。

如何找到滞后在哪里?是不是流没有立即触发lambda?还是因为有巨大的发电机写入,流正在受到阻碍?还是有一定的限制,使得lambda在给定的秒内不能被击中一定次数?

我不明白问题出在哪里,因为我什至看不到当前流是否仍然包含记录,或者流中的记录是否已经交付,但是lambda触发是滞后吗?

延迟示例: 昨天我们写了大量文章,今天我们看到这些记录已经达到了lambda!难以置信的延迟! :)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

来自Lambda Documentation

  

对于处理Kinesis或DynamoDB流的Lambda函数,   分片数是并发单位。如果您的信息流有100   活动碎片,最多将有100个Lambda函数调用   同时运行。这是因为Lambda处理每个分片的   事件顺序。

创建分片的逻辑不向最终用户公开。但这取决于你 RSU and WSUs.但是增加它们太多会花钱。

最重要的是,并发lambda par帐户受到限制。取决于您的操作区域(请参见here)。

您可以做的几件事

  1. 确保在将数据导入dynamodb中时,您使用的是随机PK而不是某些有序PK,因此增加了命中不同碎片的可能性。
  2. 确保您在摄取数据时正在重新使用与Elastic Search的连接。
  3. 增加批处理大小,以便同一lambda函数可以提取多个记录。 see Batch size here
  4. 使用脚本语言而不是Java来减少冷启动问题。
  5. 查看是否还有其他lambda正在运行,并且您正在达到lambda的最大并发限制(应该不太可能。)