[Kafka]should I use ZK and Kafka together

當時在公司安裝測試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輕鬆不得了。

 

參考

Apache ZooKeeper

Zookeeper - CLI

What is the actual role of Zookeeper in Kafka? What benefits will I miss out on if I don’t use Zookeeper and Kafka together?

Kafka 0.10.2 Documentation