并行化因子:AWS Kinesis 数据流传输至 Lambda

问题描述 投票:0回答:1

我对

ParallelizationFactor
的概念很困惑。


我的理解

https://stackoverflow.com/a/57534322/13000229
过去,一个 KDS 分片只能将数据发送到一个 Lambda 实例/调用。从同一 KDS 分片获取数据的多个 Lambda 实例无法同时运行。

https://aws.amazon.com/blogs/compute/new-aws-lambda-scaling-controls-for-kinesis-and-dynamodb-event-sources/
2019 年 11 月,出现了一个新参数

ParallelizationFactor
(每个分片的并发批次)。

默认因子 1 表现出正常行为。因子 2 允许对 100 个 Kinesis 数据分片进行最多 200 个并发调用。


问题

  1. 通过使用
    ParallelizationFactor
    ,多个Lambda实例可以同时从同一个KDS分片获取不同的数据吗?
    例如,分片有数据
    d1
    d2
    d3
    d4
    d5
    d6
    ,我们假设
    BatchSize
    = 2 和
    ParallelizationFactor
    = 2。 Lambda 实例 A 可以使用
    d1
    d2
    ,而Lambda实例B可以同时消耗
    d3
    d4
    。然后,一旦 Lambda 实例 A 完成第一批,它就会开始处理
    d5
    d6
    等等。

  1. 如果问题1正确,可能会牺牲什么? (例如同一个分片中的订单,一条数据可能会被处理多次)

  2. 如果问题1不正确,那么Lambda将如何并发处理KDS分片中的数据?

amazon-web-services aws-lambda parallel-processing amazon-kinesis
1个回答
5
投票

是的,当使用 ParallelizationFactor 时,多个 lambda 可以同时处理来自同一分片的记录。该顺序得以维持,因为具有相同分区键的记录不会同时处理。

例如,假设您有两个分区:Partition1 和 Partition2 以及两个分片

场景 1:您的所有记录仅共享两个分区键:PartitionKey1 和 PartitionKey2。在这种情况下,具有 PartitionKey1 的所有记录将最终出现在 Partition1 中,而具有 PartitionKey2 的所有记录将最终出现在 Partition2 中。设置 ParallelizationFactor 将不会导致任何记录同时处理,因为相同分区键的记录是按顺序处理的。

场景 2:您的记录有 20 个不同的分区键:PartitionKey1…PartitionKey20。理想情况下,Shard1 将包含大约一半的记录,Shard2 将包含另一半(如果它们均匀分布在两个分片中)。在这种情况下设置 ParallelizationFactor will 会导致记录同时处理。分片内具有不同分区键的记录将同时处理。

© www.soinside.com 2019 - 2024. All rights reserved.