Kafka 2.8.0 出爐了,此版本有一項重大改進:
實現了 Raft 分布式一致性機制,意味着可以脫離 ZooKeeper 獨立運行了。
ZooKeeper 在 Kafka 中扮演着重要的角色,用來存儲 Kafka 的元數據。
ZooKeeper 存儲着 Partition 和 Broker 的元數據 ,同時也負責 Kafka Controller 的選舉工作。
對於 Kafka 來講,ZooKeeper 是一套外部系統,要想部署一套 Kafka 集群,就要同時部署、管理、監控 ZooKeeper。
ZooKeeper 有自己的配置方式、管理工具,和 Kafka 完全不一樣,所以,一起搞兩套分布式系統,自然就提升了復雜度,也更容易出現問題。有時工作量還會加倍,例如要開啟一些安全特性,Kafka 和 ZooKeeper 中都需要配置。
除了復雜度,外部存儲也會降低系統效率。
例如 Kafka 集群每次啟動的時候,Controller 必須從 ZooKeeper 加載集群的狀態信息。
再比如選舉出一個新的 Controller 之后也會比較麻煩,因為需要加載元數據,而此時元數據的量可能已經非常大了,這就產生了效率問題。
所以,ZooKeeper 帶來的復雜度、系統效率這兩個問題已經成為 Kafka 的痛點,Kafka 團隊一直在努力去除對 ZooKeeper 的依賴。Kafka 2.8.0 這個版本終於實現了。
使用 Raft 模式之后,元數據、配置信息都會保存在 @metadata
這個 Topic 中,自動在集群中復制。這樣 Kafka 就會簡單輕巧很多。
但需要注意的是,Zookeeper-less Kafka 還屬於早期版本,並不完善,所以,現在不要應用在線上產品環境中。