這是earlier discussion的後續問題。我認爲Zookeeper是卡夫卡經紀人或「消息總線」的協調員。我明白爲什麼我們可能希望生產者/消費者客戶端通過Zookeeper進行交易 - 因爲Zookeeper具有內置的容錯功能,以便與哪些Kafka代理進行交易。但是對於新模式 - 即0.10.1+,我們應該總是在生產者/消費者客戶中完全繞過Zookeeper?我們是否通過這樣做放棄了任何優勢(例如,更好的容錯性)?還是Zookeeper最終仍然在幕後工作?在生產者/消費者客戶中繞過Zookeeper?
0
A
回答
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僅在卡夫卡經紀人的幕後工作,見上文。
相關問題
- 1. Java生產者 - 消費者:生產者不「通知()」消費者
- 2. 消費者過濾的生產者 - 消費者阻塞隊列
- 3. 生產者/消費者
- 4. 生產者消費者
- 5. POSIX生產者 - 消費者
- 6. Clojure生產者消費者
- 7. LinkedBlockingQueue - 生產者/消費者
- 8. Scala生產者 - 消費者
- 9. 生產者,消費者POSIX
- 10. 生產者消費者在Java中
- 11. 生產消費者
- 12. 生產者 - 消費者多個生產者多個隊列單個消費者
- 13. 使用TCP客戶機/服務器的生產者/消費者
- 14. 生產者/消費者線程中的油門消費者
- 15. 消費者生產者多線程消費者不會消逝
- 16. 生產者消費者請求取消
- 17. Grails中的生產者/消費者?
- 18. C++中的消費者/生產者
- 19. wcf中的消費者生產者
- 20. 生產者 - 消費者在python
- 21. 生產者消費者在PHP和Java
- 22. 如何在使用Semphores的生產者 - 消費者中消費?
- 23. 生產者/消費者模式與批生產者
- 24. 同步生產者,消費者和生產者隊列
- 25. 生產者/消費者 - 生產者使用高CPU
- 26. 生產者消費終止
- 27. 實現生產者消費者模式
- 28. .NET生產者 - 消費者問題
- 29. ActiveMQ一個生產者多消費者
- 30. java線程:生產者 - 消費者