kafka controller作用

controller主要依靠ZK完成對集羣broker和分區的管理如集羣broker信息、分區選舉ISR等。

ZK主要一二級節點信息如下

控制器controller作用

一 選舉Leader和ISR

控制器從ZK的/brokers/topics加載一個topic所有分區的所有副本,從分區副本列表中選出一個作爲該分區的leader,並將該分區對應所有副本置於ISR列表,其他分區類似;其他topic的所有分區也類似。

二 同步元數據信息包括broker和分區的元數據信息

控制器架子ZK的/brokers/ids以及上一個步驟得到的topic下各分區leader和ISR將這些元數據信息同步到集羣每個broker。

而且通過下面所闡述的監控機制當有broker或者分區發生變更時及時更新到集羣保證集羣每一臺broker緩存的是最新元數據。

三 broker增刪監聽與處理

3.1 broker加入的監聽和處理

控制器啓動時就起一個監視器監視ZK/brokers/ids/子節點。當存在broker啓動加入集羣后都會在ZK/brokers/ids/增加一個子節點brokerId,控制器的監視器發現這種變化後,控制器開始執行broker加入的相關流程並更新元數據信息到集羣。

3.2 broker崩潰的監聽與處理

控制器啓動時就起一個監視器監視ZK/brokers/ids/子節點。當一個broker崩潰時,該broker與ZK的會話失效導致ZK會刪除該子節點,控制器的監視器發現這種變化後,控制器開始執行broker刪除的相關流程並更新元數據信息到集羣。

四 topic變化監聽與處理

4.1 topic創建的監聽與處理

控制器啓動時就起一個監視器監視ZK/brokers/topics/子節點。當通過腳本或者請求創建一個topic後,該topic對應的所有分區及其副本都會寫入該目錄下的一個子節點。控制器的監視器發現這種變化後,控制器開始執行topic創建的相關流程包括leader選舉和ISR並同步元數據信息到集羣;且新增一個監視器監視ZK/brokers/topics/<新增topic子節點內容>防止該topic內容變化。

4.2 topic刪除的監聽與處理

控制器啓動時就起一個監視器監視ZK/admin/delete_topics/子節點。當通過腳本或者請求刪除一個topic後,該topic會寫入該目錄下的一個子節點。控制器的監視器發現這種變化後,控制器開始執行topic刪除的相關流程包括通知該topic所有分區的所有副本停止運行;通知所有分區所有副本刪除數據;刪除ZK/admin/delete_topics/<待刪除topic子節點>

五 分區變化監聽與變化處理

5.1 分區重分配監聽與處理

分區重分配通過KAFKA管理員腳本執行完成一個topic下分區的副本重新分配broker。

控制器啓動時就起一個監視器監視ZK/admin/reassign_part/子節點。當通過腳本執行分區重分配後會在該目錄增加一個子節點,子節點內容是按照一定格式構建的重分配方案,控制器的監視器發現這種變化後,控制器開始執行分區重分配相關流程如同步元數據信息。

5.2 分區擴展監聽與處理

如上面4.1 所述當創建一個topic後,控制器會增加一個監視器監視ZK/brokers/topics/<新增topic子節點內容>防止該topic內容變化。當通過腳本執行分擴展後會在該目錄增加新的分區目錄。控制器的監視器發現這種變化後,控制器開始執行分區擴展相應流程如選舉leader和ISR並同步。

六 broker優雅退出

相比較broker機器直接宕機或強制kill,通過腳本或kill -9 關閉一個broker我們稱爲broker優雅退出。即將關閉的broker向控制器發送退出請求後一直阻塞。

控制器接收到請求後,執行leader重選舉和ISR後響應broker。broker接收後退出。

這個比較特殊,不依賴ZK,直接通過broker和控制器RPC通信即可完成。

控制器fail-over

集羣在開始時集羣中第一個broker通過在ZK/controller註冊子節點brokerId使得自己成爲該集羣的控制器,其他broker雖然沒有爭取到控制器資格,但是都會起一個監視器監視ZK/controller以及向/controller_EPOCH註冊子節點

如果控制器所在broker退出、崩潰或與ZK會話失效則ZK會刪除/controller內該子節點,各個broker的監視器發現這種變化後,每個broker開始競爭直到有一個競爭成爲新的控制器,並向/controller註冊子節點,以及向/controller_EPOCH註冊子節點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章