1.Zookeeper工作機制
1.1 工作機制Zookeeper
基於觀察者模式的分佈式管理框架,它負責存儲和管理數據,然後接受觀察者的的註冊,一旦這些數據發生改變,Zookeeper就負責通知已在Zookeeper上註冊的那些觀察者做出相應反應
1.2 Zookeeper的特點
- Zookeeper:一個領導者(Leader),多個更隨着(Follower)組成的集羣
- Zookeeper集羣羣只有在半數以上節點存活,才能正常服務
- 全局數據一致性:每個Server保存一份相同的副本,Client無論連接那個Server,數據都是一致的
- 更新請求順序進行,來自一個Client的請求按照其發送順序依次進行
- 數據原子性,一次更新要麼成功要麼失敗
- 實時性,在一定時間內,Client能讀到最新數據
1.2 Zookeeper內部原理
1.2.1 選舉機制:
- 半數機制:Zookeeper集羣半數機器存活,集羣可用。所以適合安裝奇數臺服務器
- Zookeeper雖然沒有指定Master和Slave,但是Zookeeper工作時,會有一個Leader節點,其他節點爲Follower,Leader是通過內部選舉機制產生
1.2.2 節點類型:
- 持久化目錄節點:客戶端斷開連接後,創建的節點不刪除
- 持久化順序編號目錄節點:持久化目錄節點(Persisent):客戶端斷開連接後,創建的節點不刪除,指示該節點按照名稱進行編號
- 臨時目錄節點:客戶端與Zookeeper斷開連接後,該節點被刪除
- 臨時順序編號目錄節點:客戶端與zookeeper斷開連接後,開節點被刪除,只是Zookeeper對節點名稱順序編號
1.2.2 監聽器原理:
- 監聽原理詳解
- 首先要有一個main()線程
- main線程中創建zookeeper 客戶端,這時就會創建兩個線程,一個負責網絡連接通信(connect),另一個負責監聽(listen)
- 通過connector線程將註冊監聽事件發送給zookeeper
- zookeeper將註冊監聽時間添加到註冊監聽列表中
- Zookeeper監聽到數據或路徑發生變化,就會將這個消息發送給listener線程
- listener線程調用內部的process()方法
- 常見監聽
- 監聽節點數據變化:get path[watch]
- 監聽子節點變化:ls path[watch]