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-akey-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