ZooKeeper的最小數據單元ZNode,ZNode可以保存數據,也可以掛載子節點,依次構成一個層次化的結構,可以看作是樹。
ZNode的節點路徑由一系列使用斜槓(/)進行分割的路徑表示,可以向節點中寫入數據,也可以在節點下面創建子節點。
事務ID:在ZooKeeper中事務是指能夠改變服務器狀態的操作,也稱爲事務操作和更新操作,一般包括數據節點的創建與刪除,數據節點內容更新和客戶端會話
創建與失效操作。對於每一個事務請求,ZooKeeper都會爲其分配一個全局唯一的事務ID,用ZXID來表示,通常爲64位的數字,前32位(epoch)標記 leader信息,後32位
爲當前leader下的事務替增序列號,ZXID可以間接的識別出ZooKeeper處理這些更新操作的全局順序
一個epoch號對應一個leader,新的leader有新的epoch號
ZooKeeper的數據節點分爲四種類型: PERSISTENT(持久性),PERSISTENT_SEQUENTIAL(持久順序節點),EPHEMERAL(臨時節點),
EPHEMERAL_SEQUENTIAL(臨時順序節點)
順序節點在創建節點時候ZooKeeper會自動在節點名稱後面加上一個數字後綴,做爲一個新的完整的節點名字,上限爲整型的最大值。
臨時節點下面不能創建子節點
每個數據節點除了存儲節點的數據內容外,還包含了節點的相關狀態信息。
數據節點Stat對象的信息
czxid:ZNode創建節點時候的事務ID(ZXID)
mzxid:ZNode最後修改節點的事務ID(ZXID)
ctime:ZNode創建時間的絕對毫秒數
mtime:ZNode最後修改時間的絕對毫秒數
version:ZNode版本號(修改次數)
cversion:子節點修改次數
aversion:權限修改次數
ephemeralOwner:臨時節點的擁有者session id,非臨時節點爲0
dataLength:Znode的數據長度
numChildren:子節點數
pzxid:表示該節點子節點列表最後一次修改時的事務ID,只有子節點列表修改纔會更新,子節點數據內容變更不會更新
版本號:客戶端對節點內容進行變更時候 會校驗版本號,當前版本號與需要更新的版本號一致才進行更新,否則更新失敗,如果客戶端傳入version爲-1表示
按當前版本號更新
ZooKeeper Sessions
客戶端通過創建一個handle和服務端建立session連接,一旦創建成功,handle就進入CONNECTING狀態,客戶端連接一臺服務端,進入CONNECTED狀態,當客戶端斷開 如session中止,鑑權失敗或者應用直接結束handle,handle則進入CLOSED狀態