【问题标题】:AWS Kinesis, concurrent Lambda processing with a guaranteed orderingAWS Kinesis,具有保证排序的并发 Lambda 处理
【发布时间】:2020-08-19 14:13:28
【问题描述】:

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

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

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

1,2,1,3,4,1,2,1

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

在不使用会导致 Lambda 使用效率低下的分布式锁的情况下,这是否可以通过某种方式实现?

谢谢

【问题讨论】:

    标签: amazon-web-services concurrency aws-lambda amazon-kinesis


    【解决方案1】:

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

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

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

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

    【讨论】:

    【解决方案2】:

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

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

    1. 如果“每个分片的并发批次”为 1(默认为 1),则将保留整个分片的顺序。
    2. 如果 'concurrent batches per shard' 为 [2;10],则仅保留分片中具有相同分区键的记录的顺序。

    您可以在https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html查看并发批次(ParallelizationFactor

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 1970-01-01
      • 2021-09-12
      • 2016-11-03
      • 2018-12-19
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多