Kinesis 如何在工作人员之间分配分片?
How does Kinesis distribute shards among workers?
在将相邻分片分散到多个 worker 上时,是否尝试将它们保持在一起?在文档示例中,它以 1 worker/instance 和 4 个分片开始。然后发生自动缩放并启动了第二个 worker/instance。 KCL 自动神奇地将 2 个分片移动到工作人员 2。在自动缩放时是否尝试将相邻分片与工作人员保持在一起?分片时呢?
谢谢
Is there any attempt to keep adjacent shards together when spreading them out over multiple workers?
我怀疑是这样。我的理解是,顺序只在单个键的边界内保持,并且单个键的边界落在单个分片内。
假设我有 2 个键,key-a
和 key-b
,并且发生了以下事件:
["event-1-key-a", "event-2-key-b", "event-3-key-a"]
现在 key-a
有 2 个事件:["event-1-key-a", "event-3-key-a"]
和 key-b
的 1 个事件:["event-2-key-b"]
请注意,分片的发生与上述完全相同——key-a
的 2 个事件将始终在同一个分片中结束。有了这样的保证,就没有必要维护分片之间的顺序了。
随机。
如果您将 "Kinesis Consumer Application" 表示为 "Worker",则分片最多的消费者应用程序将失去 1 个分片给另一个分片较少的应用程序。
"Lease" 是这里的正确术语,它描述了消费者应用程序和分片关联。而且租约没有邻接检查,纯随机
查看源码,chooseLeaseToSteal
方法:https://github.com/awslabs/amazon-kinesis-client/blob/c6e393c13ec348f77b8b08082ba56823776ee48a/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseTaker.java#L414
在将相邻分片分散到多个 worker 上时,是否尝试将它们保持在一起?在文档示例中,它以 1 worker/instance 和 4 个分片开始。然后发生自动缩放并启动了第二个 worker/instance。 KCL 自动神奇地将 2 个分片移动到工作人员 2。在自动缩放时是否尝试将相邻分片与工作人员保持在一起?分片时呢?
谢谢
Is there any attempt to keep adjacent shards together when spreading them out over multiple workers?
我怀疑是这样。我的理解是,顺序只在单个键的边界内保持,并且单个键的边界落在单个分片内。
假设我有 2 个键,key-a
和 key-b
,并且发生了以下事件:
["event-1-key-a", "event-2-key-b", "event-3-key-a"]
现在 key-a
有 2 个事件:["event-1-key-a", "event-3-key-a"]
和 key-b
的 1 个事件:["event-2-key-b"]
请注意,分片的发生与上述完全相同——key-a
的 2 个事件将始终在同一个分片中结束。有了这样的保证,就没有必要维护分片之间的顺序了。
随机。
如果您将 "Kinesis Consumer Application" 表示为 "Worker",则分片最多的消费者应用程序将失去 1 个分片给另一个分片较少的应用程序。
"Lease" 是这里的正确术语,它描述了消费者应用程序和分片关联。而且租约没有邻接检查,纯随机
查看源码,chooseLeaseToSteal
方法:https://github.com/awslabs/amazon-kinesis-client/blob/c6e393c13ec348f77b8b08082ba56823776ee48a/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseTaker.java#L414