2016-02-03 64 views
1

卡夫卡文檔指出:卡夫卡如何幫助實現排隊抽象以及發佈 - 訂閱?

消費者標榜自己與消費者的組名,併發布到一個話題每個消息每個訂閱用戶組內交付給消費者的一個實例。消費者實例可以在單獨的進程中或在單獨的機器上。

如果所有的消費者實例具有相同的消費羣體,那麼這個作品就像在消費者傳統的隊列平衡負載。

如果所有的消費者實例有不同的消費羣體,那麼這就像發佈 - 訂閱和所有的消息被廣播到所有消費者。

我已經對此幾個疑點:
1)爲什麼會發布的消息到消費羣體的單個消費者實例?消費者是否有責任從分區中讀取數據? 什麼意思呢?
2)對特定主題感興趣的消費者應該只從他們感興趣的分區中讀取。消費者羣體的相關性是什麼?
3)這是如何幫助實現隊列和發佈者 - 子程序的抽象?

回答

2

在卡夫卡的話題可以有多個分區,如果一個消費者團體消費者有X號,該主題的分區將消費者之間進行分割。 (即:如果您有兩個分區的1個主題,並且您有一個消費者組和2個消費者,則每個消費者將從1個分區消費,如果消費者組只有1個消費者,則該消費者將從2個分區讀取) 消費者羣體基本上協調(是協調員)不同的消費者與主題和分區。如果在同一個CG中有4個消費者並且1個崩潰,則消費者組將把崩潰的消費者的分區給予同一CG中可用的其他消費者,以便處理這些分區中的信息(如果CG不重新分配不同的如果消費者崩潰,分區將不會被讀取)。

如果消費者在同一CG,然後將其發送到主題的信息當中分佈。如果每個消費者都有不同的CG,那麼他們都會得到所有的消息。

希望現在更清楚,卡夫卡文檔需要改進。

+0

但我仍不明白這是如何幫助隊列和發佈者訂閱者的抽象。 :/ –

+0

消息發佈到消費者組中的一個消費者實例的事實的相關性是什麼? –

+0

如果你有一個很大的負載,你可以讓多個消費者並行地使用和處理這些信息,在這種情況下,只有一個消費者處理消息是有價值的(你不希望所有的消費者處理相同的消息,這不是你如何分割工作)。 在發佈消息的發佈者 - 訂閱者模式中,您希望所有訂閱者都知道此消息,通過創建只有1個消費者的消費者組來做到這一點。 – Nautilus

相關問題