2017-11-25 135 views
2

我想了解如何動態地向外擴展應用程序,它消耗的話題(可惜我不能減少其數量 - 通過設計每個主題是特定類型的數據)的數量龐大。與200+卡夫卡的主題進行擴展後,

enter image description here

我想我的應用集羣從所有的200個多種主題分擔負載。例如,當一個新的應用程序節點添加到集羣中時,它應該從舊節點「偷走」一些主題訂閱,這樣負載將再次均勻分佈。

據我瞭解,卡夫卡partinions /消費羣體幫助並行的話題,不共享多個主題之間的負載。

+2

能不能讓所有的應用程序訂閱所有的200個多種話題與一個正則表達式訂閱?然後他們都可以在一個消費羣體中 –

回答

1

您需要確保您的所有App實例使用相同的Kafka Consumer Group(通過group.id)。在這種情況下,你實際上擁有你想要的均勻分佈。當添加新的應用程序實例時,消費者組將重新平衡並確保負載是分佈式的。

而且,當創建一個新的話題/分區它會採取消費達人「metadata.max.age.ms」(默認爲5分鐘)開始從它消耗。確保將「auto.offset.reset」設置爲「最早」以不會錯過任何數據。

最後,你可能想使用正則表達式來訂閱所有這些議題(如果可能)。

0

卡夫卡主題是一組類似類型的消息,所以您可能有200多種類型的消息已被200多種類型的消費者使用(即使一個消費者可能能夠處理多種類型,邏輯上你有200多個不同的處理)。

卡夫卡分區是從一個主題並行化消息的消耗的方法。每個分區將由綁定到該主題的消費者組中的一個消費者完全消耗,因此爲了理解分區功能,主題的分區總數需要至少與消費者組中的消費者數量相同。

所以在這裏你將有200多個主題,每個都具有N個分區(其中N大於或等於應用您的預計最大數量),並且每個應用程序應該由所有的200個多種主題消費。消費者必須使用消費者組名稱來標記自己,每個發佈到主題的記錄都會交付給每個訂閱消費者組中的一個消費者實例。所有消費者都可以使用同一個消費羣體。

Kafka documentation對於一個更好的解釋...