淺談我們爲什麼需要zookeeper?

大家都知道zookeeper是作爲一個分佈式協調工具,在很多大數據組件中都有出現
那麼zookeeper是如何成爲協調工具呢?

首先Zookeeper有自己的文件系統 ,而這個文件系統可以監控目錄的變化,這也就是協調工具的核心!

例如hadoop 2.0版本新增的HA功能,實現了namenode的主備切換就是由zookeeper搞定的,如下圖:
HA架構圖

ZKFC服務中有一個zkClient客戶端向zk集羣註冊了一個目錄,這個目錄是短暫性目錄,只要此zkClient關閉,此目錄消失

而備份節點的ZKFC 服務中也有一個zkClient客戶端在實時的監控這個目錄的變化!一旦此目錄消失,則調用回調函數:啓動備份節點爲主節點

這是zookeeper爲hadoop提供的協調服務

那麼接下來換一個場景,比如kafka中 zookeeper如何提供協調服務呢

Kafka也依賴zk集羣,在kafka0.8版本以前zk用來存儲offset及borker節點的註冊信息,kafka0.10版本後zk不再存儲offset,只存儲borker節點信息

那麼這裏zk的作用是什麼呢,看下圖:
在這裏插入圖片描述

那麼一旦某個borker宕機,其他兩個borker就能監控到變化(觀察者模式),從而調用自身的回調函數進行相應的處理邏輯! 例如重新分佈數據等等

那麼zookeeper自身也有主從結構:
官網圖

那麼zookeeper如何知曉leader宕機呢?

其實zookeeper自身的各個server也有對應的zkClient,並且實時監控zookeeper目錄
在這裏插入圖片描述

假設Leader宕機,那麼此時文件系統中目錄會發生變化,因爲zookeeper提供了一種暫時目錄,創建暫時目錄語句爲:create -e
當連接的zkClient斷開連接,那麼在zookeeper中創建的短暫目錄就會消失掉

那麼此時其他四個server就可以監控到Leader宕機,從而調用自身的回調函數,進行再次選舉leader的結構!

我們來看一下zookeeper文件目錄:
在這裏插入圖片描述
這個zookeeper目錄就是zk集羣自身監控的目錄

至此我們明白了zookeeper的作用
在分佈式場景中,zookeeper是非常常見的組件,靈活掌握,可以幫助我們理解其他組件

有收穫的小夥伴可以給作者點個贊哈~

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