我有一個主題叫Topic1
有兩個分區。假設serverA
是Topic1
,partition1
和serverB
是追隨者的領導者。卡夫卡製作人消息流
如果在我的客戶端發佈到serverB
(在broker.list中,我只指定serverB
)會發生什麼情況?消息如何傳播?它被髮送到serverB,然後發送到serverA。
我有一個主題叫Topic1
有兩個分區。假設serverA
是Topic1
,partition1
和serverB
是追隨者的領導者。卡夫卡製作人消息流
如果在我的客戶端發佈到serverB
(在broker.list中,我只指定serverB
)會發生什麼情況?消息如何傳播?它被髮送到serverB,然後發送到serverA。
要將消息發佈到分區,客戶機首先從Zookeeper中找到分區的領導,並將消息發送給領導。 領導將消息寫入其本地日誌。每個追隨者使用單個套接字通道不斷地從領導者那裏獲取新消息。追隨者將每個收到的消息寫入其自己的日誌,並將確認發送回領導者。一旦領導者從所有副本接收ISR確認,該消息是致力於
因此,要回答你的問題,如果客戶端發佈到ServerB,將查詢到飼養員知道TOPIC1和分區1中的佼佼者。 Zookeeper迴應說serverA是partition1的領導者。因此,客戶端將消息發送到serverA(這裏我假設分區器會將消息發送到partition1)。
所有這些都由kafka生產者處理。最終用戶應用程序不需要擔心這些細節。
你可以閱讀更多關於這個here
我發現這個document在解釋內部發生了什麼與卡夫卡非常有幫助。
有一個API被生產者用來向任何一個Kafka服務器詢問這些分區的分區列表和所有元數據。該元數據包含每個分區的引導代理。生產者調用分區器來獲取目標分區,然後直接與該分區的Kafka代理領導進行對話,將消息寫入分區。領導者將處理與管理分區複製品的任何其他經紀人的通信。