2017-06-22 77 views
0

假設我有消費者組G1,它有三個消費者C1,C2和C3。所有訂閱具有單個分區的主題1。現在製作人在分區1上產生3條消息,代理 將切換1消息給每個消費者。 對不對?隊列消息/消費者組的工作流程?

但我得到了在kafka tutorial

  1. 單個消費者訂閱一個特定的主題,從部分Workflow of Queue Messaging/Consumer Group 閱讀下面的粗體文字後一頭霧水,假設「主題-01」和「組ID」爲 「組-1「
  2. Kafka與Pub-Sub Messaging以相同的方式與消費者進行交互,直到消費者訂購新的 消費者訂閱與」Group-1「具有相同」Group ID「的相同主題」Topic-01「
  3. 開當新消費者到達時,Kafka將其操作切換到共享模式並在兩個消費者之間共享數據。 這種共享將繼續進行,直到消費者數量 達到爲該特定主題配置的分區數量。
  4. 一旦消費者數量超過分區數量,新消費者 將不會收到任何進一步的消息,直到任何一個現有的消費者退訂。 這種情況的出現是因爲卡夫卡的每個消費者都將被分配至少一個 分區,並且一旦所有分區被分配給現有消費者,新消費者將不得不等待。

如果我走3/4點,只有消費者1將獲得所有消息作爲消費者數量(這是3)大於沒有分區(這是1)?這是否意味着我需要在所有分區中創建3個分區,並且組G1將使用所有3個分區進行預訂,以便每個消費者分別獲取一條消息?

回答

0

如果我用點3/4去,只會consumer1將得到的所有消息消費者的數量(也就是3)比不分區的更大(即1)

是。它可以是三者中的一個。

這是否意味着我需要在所有組中創建3個分區,並且組G1將使用所有3個分區進行預訂,以便每個消費者分別獲取一條消息?

是的,如果你的主題有3個或更多的分區,那麼所有3個消費者將開始消費你的話題。

+0

'是的。它可以是三者中的一個。「可以是這樣的: - 第一條消息可以由C1消耗。 C2第二,C3第三,或者它會一直是同一個消費者? – user3198603

+0

沒有將分區分配給組中的使用者,分配保持不變,直到消費者取消訂閱或停止,或分區數量更改或新消費者加入組。因爲它是一個動態的任務,這就是我提到三個消費者中的任何一個的原因。 –

+0

'沒有將分區分配給組中的使用者,分配保持不變......誰將分區分配給使用者?我相信它的消費者會選擇分區並提取消息? – user3198603

0

卡夫卡提供兩種不同的遞送模式:

  • 競爭/消費者:當消費者是相同的消費羣從一個主題接收,所述主題中的每個分區被分配給一個且僅一個消費者。這意味着如果消費者不止是分區,剩餘的消費者就會閒置而不接收消息。在你的例子中,唯一的一個分區將被分配給只有一個消費者,它將是唯一一個接收消息的消費者;其他消費者將閒置。分區的數量以消費者的角度定義了並行性。

  • 發佈/訂閱:當消費者屬於不同的消費羣體,他們將收到相同的消息(如在消息經紀人的話題/ subacriptions發生)