2016-01-21 58 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