1
我有兩個消費羣,即G1和G2。每組傳遞給一位消費者的消息?
- G1有兩個成員M1,M2。
- G2再次有兩個成員M3,M4
G1輪詢卡夫卡的話題,將信息傳送到只有一名成員無論是M1或M2這裏不是兩者兼而有之?
同樣當G2輪詢後的某個時候,它仍然會在主題上找到消息。這裏也是枯萎的M3或M4會收到信息?
此外,我相信組中的所有成員應該在同一個節點上。對 ?客戶代碼或Kafka有責任選擇組中的特定成員?
我有兩個消費羣,即G1和G2。每組傳遞給一位消費者的消息?
G1輪詢卡夫卡的話題,將信息傳送到只有一名成員無論是M1或M2這裏不是兩者兼而有之?
同樣當G2輪詢後的某個時候,它仍然會在主題上找到消息。這裏也是枯萎的M3或M4會收到信息?
此外,我相信組中的所有成員應該在同一個節點上。對 ?客戶代碼或Kafka有責任選擇組中的特定成員?
您的問題的答案取決於這些消費羣體消費的主題中有多少個分區。只有一個消費者組的成員才能從主題的每個分區讀取。
如果主題T1中只有一個分區,那麼M1和M3會從中讀取,M2和M4將不會獲得任何消息。
如果在T1兩個分隔(比如P1和P2),那麼M1和M3將得到T1P1和M2和M4的消息將來自T1P2
一個消費者團體的所有成員獲得的消息不必須位於同一節點上
其中一個代理被指定爲組的協調員,負責管理組的成員以及他們的分區分配。
正如你所說'如果話題T1中只有一個分區,那麼M1和M3會從中讀取,M2和M4將不會收到任何消息。「我相信你的帖子的最後一個陳述是你說它的經紀人是負責任的選擇M1而不是M2? – emilly
最簡單的說法是,客戶端和代理進行通信以確定組成員資格和分區分配。更復雜的答案是,組成員大多是在代理上完成的(請參閱https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-GroupMembershipAPI)和分區任務主要在Kafka客戶端庫中完成(請參閱https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal) –
如果您有興趣瞭解更多信息Kafka 0.11.0.0增加現有的分區分配策略列表中新的粘滯分區分配算法。有一個非常詳細的例子寫在這裏https://cwiki.apache.org/confluence/display/KAFKA/KIP-54+-+Sticky+Partition+Assignment+Strategy –