我对
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 个并发调用。
问题
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不正确,那么Lambda将如何并发处理KDS分片中的数据?
是的,当使用 ParallelizationFactor 时,多个 lambda 可以同时处理来自同一分片的记录。该顺序得以维持,因为具有相同分区键的记录不会同时处理。
例如,假设您有两个分区:Partition1 和 Partition2 以及两个分片
场景 1:您的所有记录仅共享两个分区键:PartitionKey1 和 PartitionKey2。在这种情况下,具有 PartitionKey1 的所有记录将最终出现在 Partition1 中,而具有 PartitionKey2 的所有记录将最终出现在 Partition2 中。设置 ParallelizationFactor 将不会导致任何记录同时处理,因为相同分区键的记录是按顺序处理的。
场景 2:您的记录有 20 个不同的分区键:PartitionKey1…PartitionKey20。理想情况下,Shard1 将包含大约一半的记录,Shard2 将包含另一半(如果它们均匀分布在两个分片中)。在这种情况下设置 ParallelizationFactor will 会导致记录同时处理。分片内具有不同分区键的记录将同时处理。