? ? ? ? ?Kafka的共識(shí)機(jī)制KRaft,仍然處于預(yù)覽機(jī)制。未來(lái)KRaft將作為Apache Kafka的內(nèi)置共識(shí)機(jī)制將取代
Zookeeper。該模式在2.8版本當(dāng)中就已經(jīng)發(fā)布了體驗(yàn)版本,在3.X系列中KRaft是一個(gè)穩(wěn)定release版本KRaft運(yùn)行模式的
kafka集群,不會(huì)將元數(shù)據(jù)存儲(chǔ)在zookeeper中,即部署新集群的時(shí)候,無(wú)需部署zk集群,因?yàn)镵afka將元數(shù)據(jù)存儲(chǔ)在
Controller節(jié)點(diǎn)的KRaft Quorum中。KRAFT可以帶來(lái)很多好處,比如可以支持更多的分區(qū),更快速的切換Controller,
也可以避免Controller緩存的元數(shù)據(jù)和zk存儲(chǔ)的數(shù)據(jù)不一致帶來(lái)的一系列問(wèn)題。
?
在當(dāng)前架構(gòu)中,一個(gè)kafka集群包含多個(gè)broker節(jié)點(diǎn)個(gè)一個(gè)ZooKeeper集群。我們?cè)谶@張圖中描繪了一個(gè)典型的集群結(jié)構(gòu):4個(gè)broker節(jié)點(diǎn)個(gè)3個(gè)ZooKeeper節(jié)點(diǎn)。kafka集群的Controller(橙色)在被選中后,會(huì)從ZooKeeper中加載他的狀態(tài)。Controller指向其他Broker節(jié)點(diǎn)的箭頭表示Controller在通知其他briker發(fā)生了變更,如Leaderanddisr和Updatemetdata請(qǐng)求。
在新的架構(gòu)中,3個(gè)Controller節(jié)點(diǎn)代替三個(gè)ZooKeeper節(jié)點(diǎn)。控制器節(jié)點(diǎn)和Broker節(jié)點(diǎn)在不同的進(jìn)程中。Controller節(jié)點(diǎn)中會(huì)選擇一個(gè)成為L(zhǎng)eader(橙色)。新架構(gòu)中,控制器不會(huì)想Broker推送更新,而是Broker從這個(gè)Controller Leader拉取元數(shù)據(jù)的更新信息。
注意:盡管Controller進(jìn)程在邏輯上與Broker進(jìn)程是分離的,但他們不需要再物理上分離,即在某些情況下,部分所有Controller進(jìn)程和Broker進(jìn)程可以使同一個(gè)進(jìn)程,即一個(gè)broker節(jié)點(diǎn)即是Broker也是Controller。另外在同一個(gè)節(jié)點(diǎn)上可以運(yùn)行兩個(gè)進(jìn)程,一個(gè)是Controller進(jìn)程,一個(gè)是broker進(jìn)程,這相當(dāng)于在較小的及群眾。Zookeeper進(jìn)程可以想Kafka Broker一樣部署在相同的節(jié)點(diǎn)上。