2016-01-21 33 views
0

有没有试图将相邻的碎片分散到多个工作人员身上?在文档示例中,它以1个工人/实例和4个分片开始。然后发生自动缩放,第二个工人/实例启动。 KCL自动将2个碎片移动到工作人员2上。在自动缩放时,是否有任何尝试将相邻碎片与工人保持在一起?什么时候分割碎片?Kinesis如何在工人中分配碎片?

感谢

+0

你说的相邻碎片是什么意思?事件使用散列函数进行分发,散列函数通常会将相邻的密钥分散并传播给其他碎片。 – Guy

+0

相邻的碎片是提供“接触”散列键的碎片。亚马逊在这里描述得很好 - http://docs.aws.amazon.com/kinesis/latest/APIReference/API_MergeShards.html。合并碎片时这是一个重要的概念。 – darrickc

+0

简答题 - 没有。长的答案 - 如果重要的话,你总是可以重写KCL的LeaseTaker算法。随机窃取实现起来更简单,并解决了主要用例。 – Krease

回答

2

随机。

如果您的意思是“Kinesis Consumer Application”为“Worker”,那么具有最多碎片的消费者应用程序会丢失1个碎片给另一个碎片较少的应用程序。

“租赁”这里是正确的术语,它描述了一个消费者应用&分片关联。而且没有邻接检查租约,这是纯粹的随机。

查看源代码,chooseLeaseToSteal方法:https://github.com/awslabs/amazon-kinesis-client/blob/c6e393c13ec348f77b8b08082ba56823776ee48a/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseTaker.java#L414

0

是否有任何企图靠近的碎片保持在一起的时候散布出来在多个工人呢?

我怀疑是这种情况。我的理解是,订单仅在单个关键点的边界内保持不变,并且单个关键点的边界属于单个分片。

想象我有2个按键,key-akey-b,并且以下事件发生了:

["event-1-key-a", "event-2-key-b", "event-3-key-a"] 

现在我们有2个事件key-a["event-1-key-a", "event-3-key-a"]

和1事件key-b["event-2-key-b"]

请注意,分片发生与上述完全相同 - key-a的2个事件始终以第相同的碎片。作为保证,维护碎片之间的顺序是没有必要的。

+0

虽然你是正确的,这不是我问的问题。我对resharding和autoscaling不关心消息的顺序很好奇。 – darrickc

+0

我认为碎片是彼此独立的。这是否回答了这个问题?或者你担心碎片分布不均匀? – neurite

+0

我认为这可能是真的,他们是独立的;我只是好奇亚马逊如何在工人中分配他们。我的猜测是他们不会试图将相邻的碎片放在一起。 – darrickc