2014-12-22 30 views
0

我有一個主題叫Topic1有兩個分區。假設serverATopic1,partition1serverB是追隨者的領導者。卡夫卡製作人消息流

如果在我的客戶端發佈到serverB(在broker.list中,我只指定serverB)會發生什麼情況?消息如何傳播?它被髮送到serverB,然後發送到serverA。

回答

1

要將消息發佈到分區,客戶機首先從Zookeeper中找到分區的領導,並將消息發送給領導。 領導將消息寫入其本地日誌。每個追隨者使用單個套接字通道不斷地從領導者那裏獲取新消息。追隨者將每個收到的消息寫入其自己的日誌,並將確認發送回領導者。一旦領導者從所有副本接收ISR確認,該消息是致力於

因此,要回答你的問題,如果客戶端發佈到ServerB,將查詢到飼養員知道TOPIC1和分區1中的佼佼者。 Zookeeper迴應說serverA是partition1的領導者。因此,客戶端將消息發送到serverA(這裏我假設分區器會將消息發送到partition1)。

所有這些都由kafka生產者處理。最終用戶應用程序不需要擔心這些細節。

你可以閱讀更多關於這個here

1

我發現這個document在解釋內部發生了什麼與卡夫卡非常有幫助。

有一個API被生產者用來向任何一個Kafka服務器詢問這些分區的分區列表和所有元數據。該元數據包含每個分區的引導代理。生產者調用分區器來獲取目標分區,然後直接與該分區的Kafka代理領導進行對話,將消息寫入分區。領導者將處理與管理分區複製品的任何其他經紀人的通信。