【ZooKeeper】 --- ZK數據模型、節點類型、節點屬性、watch機制


1 、ZK數據模型

ZooKeeper的視圖結構和標準的Unix文件系統類似,其中每個節點稱爲“數據節點”或ZNode,每個znode可以存儲數據,還可以掛載子節點,因此可以稱之爲“樹”。
需要注意的是 創建znode時,每個znode都必須指定值,如果沒有值,節點是不能創建成功的。

在Zookeeper中,znode是一個跟Unix文件系統路徑相似的節點,可以往這個節點存儲或獲取數據 ; 且通過客戶端可對znode進行增刪改查的操作,還可以註冊watcher監控znode的變化。 其數據模型可用下圖進行表示:
在這裏插入圖片描述


2 、ZK節點類型

持久(persistent)節點:
(1) session斷開後,數據不會丟失
(2)可以創建子節點
在這裏插入圖片描述
臨時(ephemeral)節點:
(1)session斷開後,數據會丟失
(2)不可以創建子節點
在這裏插入圖片描述
持久順序(PERSISTENT_SEQUENTIAL)節點:
(1)、(2)同持久節點
在這裏插入圖片描述
(3)創建順序節點時會默認設置順序標識,即znode名稱後會附加一個值 — 順序號 ,順序號是一個單調遞增的計數器,由父節點維護
在這裏插入圖片描述
臨時順序(EPHEMERAL_SEQUENTIAL)節點: —> ZK實現分佈式鎖的基礎。
(1)、(2)同臨時節點,(3)同持久順序節點


3 、ZK節點屬性

在這裏插入圖片描述


4、 ZK watch機制

所謂watch機制,簡單點理解就是某個客戶端(watcher)可以對ZK中的Node進行監聽(watch),當這個節點相關的數據發生變化時,ZK服務器會讓監聽這個節點的客戶端(watcher)感知到它監聽的節點具體發生了什麼變化(觸發客戶端的監聽事件)。

需要注意的是:原生客戶端中ZK的watch 是一次性的,觸發後立即銷燬 —> 但 Apache Curator將其改造成了可以永久監聽。

下圖是可進行watch操作的命令:
在這裏插入圖片描述


4.1 NodeCreated — 監聽的節點(還未創建)被創建時觸發

在這裏插入圖片描述


4.2 NodeDataChanged — 監聽節點的數據發生改變時觸發

在這裏插入圖片描述
當然也可以用如下的方式(或者其他方式)進行監聽:
在這裏插入圖片描述


4.3 NodeDeleted — 監聽的節點被刪除時觸發

測試如下:
在這裏插入圖片描述


4.4 NodeChildrenChanged — 監聽的節點創建、刪除子節點時觸發(ls、ls2命令)

測試如下:
在這裏插入圖片描述
總結:

  • Is/ls2爲父節點設置watch ,創建子節點會觸發 NodeChildrenChanged
  • Is/ls2爲父節點設置watch ,刪除子節點會觸發 NodeChildrenChanged

但要格外注意:★★★★★

Is/ls2爲父節點設置watch ,修改子節點不觸發事件

驗證如下:
在這裏插入圖片描述
由此可知,我們想監聽子節點數據的變化,只能直接監聽那個子節點,即
在這裏插入圖片描述


end

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