DynamoDB流无法触发Lambda的并发。

0

【以下的问题经过翻译处理】 我有一个DynamoDB表,我已经配置了一个Lambda来接收DynamoDB流触发器,以便我可以实现下面显示并在这里描述的“扇出”模式的目标:

https://aws.amazon.com/blogs/database/how-to-perform-ordered-data-replication-between-applications-by-using-amazon-dynamodb-streams/

在我的DynamoDB表中,只有一个分区键(没有排序键),分区键由唯一的GUID组成,因此我们的分区具有最大的稀疏性(建议防止热分区)。当我更新这个表中的记录时,我的触发器Lambda并没有同时运行,尽管我设置了并发=5。无论我将批处理配置设置为何种值,我总是得到一个单个Lambda同时运行,并且流批处理大小=1。更糟糕的是,如果我同时触发多个记录(这是我主要的需求),不仅存在这种单线程行为,而且在一个接一个运行几分钟后,整个流仅被取消,不再触发任何Lambda(导致更新的记录没有任何Lambda处理)。您对可能正在发生的问题以及如何修复以实现扇出模式(即多个并发Lambda)有什么想法吗?我没有维护碎片排序的要求,因此最大的异步性是目标。感谢您提供的任何见解!

profile picture
エキスパート
質問済み 9ヶ月前26ビュー
1回答
0

【以下的回答经过翻译处理】 并发性可通过两个因素实现:

  1. DynamoDB表中的分区数。
  2. Lambda函数的并行化因子。

我猜想您的DynamoDB表只有一个分区,这会导致流中只有一个分片,从而只能调用一个Lambda函数。为了增加并发性,您可以采取以下措施:

  1. 将DynamoDB表上的吞吐量容量单位(WCU)增加到40,000,并在表处于“活动”状态时,将其降低为您的可用工作容量需求。这将增加分区,并最终增加并行化。
  2. 并行化因子增加到最大值10。即对于每个流中的分片,可以调用10倍的Lambda函数。
profile picture
エキスパート
回答済み 9ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ