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
专家
已提问 8 个月前19 查看次数
1 回答
0

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

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

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

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

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则