0

這是earlier discussion的後續問題。我認爲Zookeeper是卡夫卡經紀人或「消息總線」的協調員。我明白爲什麼我們可能希望生產者/消費者客戶端通過Zookeeper進行交易 - 因爲Zookeeper具有內置的容錯功能,以便與哪些Kafka代理進行交易。但是對於新模式 - 即0.10.1+,我們應該總是在生產者/消費者客戶中完全繞過Zookeeper?我們是否通過這樣做放棄了任何優勢(例如,更好的容錯性)?還是Zookeeper最終仍然在幕後工作?在生產者/消費者客戶中繞過Zookeeper?

回答

1

Zookeeper仍然在幕後工作,但0.9+客戶不再需要擔心,因爲消費者偏移量現在存儲在Kafka主題中,而不是存儲在zookeeper中。

1

要添加到Hans Jerspersen的答案中,最近的Kafka生產者/消費者客戶端(0.9+)不再與ZooKeeper進行交互。

如今ZooKeeper只被卡夫卡經紀人(即卡夫卡的服務器端)使用。這意味着你可以例如鎖定客戶端到所有ZooKeeper實例的外部訪問,以提高安全性。

我明白爲什麼我們可能希望生產者/消費者客戶端通過Zookeeper進行交易 - 因爲Zookeeper具有內置的容錯功能,可以與哪個Kafka代理進行交易。

生產者/消費者客戶不通過ZooKeeper「交易」,見上文。

但是對於新模型 - 即0.10.1+ - 我們應該總是在生產者/消費者客戶中完全繞過Zookeeper嗎?

如果您的問題的動機是因爲您想實現您自己的卡夫卡生產者或消費者客戶端,那麼答案是:您的自定義客戶端不應該再有ZooKeeper了。官方卡夫卡生產者/消費者客戶(Java/Scala)或例如Confluent's C/C++, Python, or Go clients for Kafka演示瞭如何通過利用Kafka功能(而不必依賴ZooKeeper等單獨服務)實現可伸縮性,容錯性等。

通過這樣做我們是否放棄了任何優勢(例如,更好的容錯性)?還是Zookeeper最終仍然在幕後工作?

不,我們在這裏沒有放棄任何優勢。否則,卡夫卡項目不會改變其生產者/消費者客戶端停止使用ZooKeeper,並開始使用卡夫卡自己的內部工作。

ZooKeeper僅在卡夫卡經紀人的幕後工作,見上文。