Kafka 3.3 使用 KRaft 共識協議替代 ZooKeeper

infoq 發佈 2022-11-16T09:08:10.277717+00:00

作者 | Andrea Messetti譯者 | 明知山策劃 | 丁曉昀Apache 軟體基金會發布了包含許多新特性和改進的 Kafka 3.3.1。這是第一個標誌著可以在生產環境中使用KRaft(Kafka Raft)共識協議的版本。

作者 | Andrea Messetti

譯者 | 明知山

策劃 | 丁曉昀

Apache 軟體基金會發布了包含許多新特性和改進的 Kafka 3.3.1。這是第一個標誌著可以在生產環境中使用KRaft(Kafka Raft)共識協議的版本。在幾年的開發過程中,它先是在 Kafka 2.8 早期訪問版本中發布,然後又在 Kafka 3.0 預覽版本中發布。


KRaft 是一種共識協議,可以直接在 Kafka 中管理元數據。元數據的管理被整合到了Kafka當中,而不需要使用像ZooKeeper這樣的第三方工具,這大大簡化了 Kafka 的架構。這種新的 KRaft 模式提高了分區的可伸縮性和彈性,同時簡化了 Kafka 的部署,現在可以不依賴 ZooKeeper 單獨部署 Kafka 了。


KRaft 使用了Raft共識算法的一種基於事件的變體,因此得名。



隨 KRaft 引入的新的仲裁控制器確保元數據在整個仲裁中可以被準確複製。活動控制器將元數據存儲在事件源日誌主題中,仲裁中的其他控制器對活動控制器創建的事件做出響應。事件日誌定期進行快照,確保日誌不會無限增長。與基於 ZooKeeper 的控制器不同,如果出現了問題,仲裁控制器不需要從 ZooKeeper 加載狀態,因為集群的內部狀態已經分布在元數據主題中。這大大減少了不可用時間窗口,縮短了系統最壞情況恢復時間。


下圖顯示了使用新的仲裁控制器比使用 ZooKeeper 更快地關閉具有 200 萬個分區的 Kafka 集群。



新的 KRaft 共識算法和仲裁控制器使得 Kafka 集群可以擴展到數百萬個分區,不僅提升了穩定性,讓 Kafka 變得更容易監控、管理和支持,而且讓整個系統可以有一個單一的安全模型,使控制器故障轉移接近瞬時。


Kafka 社區計劃在下一個版本(3.4)中棄用 ZooKeeper,然後在 4.0 版本中完全刪除它。


此外,Kafka 3.3 還提供了其他一些新特性,比如添加了與元數據日誌處理錯誤相關的指標,允許用戶為其他用戶創建委託令牌,以及嚴格統一的粘性分區器,以縮短分區時間。


對於 Kafka Streams,這個版本增加了源/接收器指標,如消費/生產吞吐量、暫停/恢復拓撲,並集成了 KStream transform()和 process()方法。Kafka Connect 增加了對源連接器的精確一次語義支持。


原文連結

https://www.infoq.com/news/2022/10/apache-kafka-kraft/


相關閱讀:

使用 Strimzi 將 Kafka 和 Debezium 遷移到 Kubernetes(https://www.infoq.cn/article/ElNtSM5ISobpMB8fMC0j)

Flink 讀寫多套 Kerberos 認證的 Kafka 方案(https://xie.infoq.cn/article/eebc47cc789df57c040f6a5c2)

關鍵字: