當時在公司安裝測試Kafka時,同事最常問我是否真的需要ZK呢?
是否可以讓架構更簡單並單純使用Kafka cluster,我當時的回答是:無法避免。
很多的分散式平台,大多都會有一個中央控管中心,Kafka就是依賴ZK這特性,
掌握cluster member,如那個broker掛了,必須通知所有還活的broker要馬上選出新Leader,
新Leader選出後,還要通知Producer和Consumer現在的新Leader是誰(你們必須要改連線了),
而這就是ZK在Kafka最主要的任務,協調三者(producer、broker、consumer)工作、一致的Topic組態、
資料讀取配額、broker狀態..等資訊同步,最終達到Message一致化目的。下圖是我公司目前架構
另外kafka的system tools在使用上都需要ZK connection string,
最常使用的第一個就是kafka-topics.bat來建立topic,你會看到必須輸入ZK connection string
再次證明Kafka並無法脫離ZK
kafka-topics.bat --create --zookeeper 127.0.0.1:2181 --replication-factor 2 --partitions 3 --topic rico-topic
所有topic’s configuration都會存放在ZK node
另外broker.cnofig也明確指出ZK是基本配置
以目前最新版的Kafka來看依然需要ZK來當一個中心協調者,並且監控node狀態且通知cluster所有member,
而且透過ZK and Kafka cluster模式,讓我在維護相當方便,maintain a rolling kafka and ZK輕鬆不得了。
參考