AWS Kinesis,保证有序的并发Lambda处理

问题描述

我有一个Lambda,事件源指向Kinesis Stream使用者(具有任意数量的分片)

我想确保Lambda按顺序而不是同时处理流中具有相同“分区键”的项目。 (这被用作对象的标识,我不希望多个Lambda在同一对象上同时执行逻辑。)

例如,如果流中的项目具有分区键:

1,2,1,3,4,1

如果我们采用从左到右的处理顺序,则Lambda将同时使用分区键1,2、3和4来处理一个项目。然后,当它完成具有特定分区键的项目时,可以开始使用该分区键处理另一个项目。

是否可以通过某种方式实现这一点,而无需使用会无效利用Lambda的分布式锁?

谢谢

解决方法

似乎我以错误的方式解决了这个问题。 Lambda保证在一个分片中一次可以一次批调用Lambda实例。因此,不需要分布式锁,因为在最坏的情况下,同一批中将有多个记录属于同一实体,并对其进行处理以便可以在Lambda函数本身中在内存中进行管理。

AWS常见问题解答http://aws.amazon.com/lambda/faqs/中的参考

问:问:AWS Lambda如何处理来自Amazon Kinesis流和 Amazon DynamoDB流?

发送到您的AWS的Amazon Kinesis和DynamoDB流记录 每个分片严格对Lambda函数进行序列化。 这意味着 您将两个记录放在同一碎片中,Lambda保证您的 Lambda函数将成功与第一条记录一起调用 在第二条记录中调用它之前。如果调用一个 记录超时,被限制或遇到任何其他错误Lambda 将重试,直到成功(或记录达到其24小时) 到期),然后再转到下一条记录。的顺序 不能保证不同分片之间的记录,并且 每个碎片并行发生。

,

具有相同“分区键”的项目将由 Lambda 按顺序处理以进行流事件源映射。

此外,您可以在创建 Lambda 触发器时指定“每个分片的并发批次”:

  1. 如果“每个分片的并发批次数”为 1(默认为 1),则将保留整个分片的顺序。
  2. 如果“每个分片的并发批次数”为 [2;10],则只会为分片内具有相同分区键的记录保留顺序。

您可以在 ParallelizationFactor

中查看并发批次 (https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html)