
分布式協調服務是分布式應用中不可缺少的,通常擔任協調角色,比如leader選舉、負載均衡、服務發現、分布式隊列和分布式鎖
Zookeeper資料模型:
一、層級命名空間
1、data:每個znode擁有一個資料域,記錄使用者資料,該節點的資料類型為位元組數組;
2、type:zonde類型,具體分為persistent(持久化節點)、ephemeral(臨時節點)、persistent_sequential(在持久化節點後面追加一個增量的唯一數字)、ephemeral_sequential(在臨時節點後面追加一個增量的唯一數字);
3、version:znode中資料的版本号,每次資料更新版本都會加一;
4、children:znode可以包括多個子節點;
5、ACL:znode通路控制清單,使用者可以設定每個znode的通路使用者清單,以保證znode被安全通路。
二、Watcher:watcher是zookeeper提供的釋出/訂閱機制,使用者可在某個znode上注冊watcher以監聽它的變化,一旦znode被删除或者更新,zookeeper将以事件的方式将變化内容發送給監聽者,需要注意,wacther一旦觸發後就會删除,除非使用者再次注冊該watcher。
三、Session:是用戶端與zookeeper通信通道,同一個session中的消息是有序的,Session具有容錯性,如何有伺服器當機,用戶端會自動切換到其它活着服務上。
ZooKeeper基本架構
讀路徑、寫路徑、作為資料中心間的橋梁、作為消息總線。
ZooKeeper提供了Java和C語言兩種API
ZooKeeper應用案例:
leader選舉(eg:Hbase、YARN、HDFS)、分布式隊列(幫忙Master節點維護作業及worker資訊),負載均衡:Kafka是場景,Broker和Customer主要在Zookeeper中寫入資訊,eg:Broker節點注冊資訊、Consumer注冊資訊、Consumer Offset追蹤資訊。