zookeeper學習筆記(二)--zkclient&curator詳解
Zookeeper核心概念
分散式配置中心(儲存):disconf(zk) diamond(mysql+http)
什麼是znode
ZooKeeper操作和維護的為一個個資料節點,稱為 znode,採用類似檔案系統的層級樹狀結構進行管理。如果 znode 節點包含資料則儲存為位元組陣列(byte array)。
建立 znode 時需要指定節點型別
znode 共有 4 種類型,分別為:持久(無序)、臨時(無序)、持久有序和臨時有序。
節點型別:
2大類、四種類型 持久、臨時、持久有序、臨時有序
PERSISTENT 持久型別,如果不手動刪除 是一直存在的
PERSISTENT_SEQUENTIAL
EPHEMERAL 臨時 客戶端session失效就會隨著刪除節點 沒有子節點
EPHEMERAL_SEQUENTIAL 有序 自增
Stat資料結構:
Stat中記錄了這個 ZNode 的三個資料版本,分別是version(當前ZNode的版本)、cversion(當前ZNode子節點的版本)和 cversion(當前ZNode的ACL版本)。
Stat:狀態資訊、版本、許可權相關
狀態屬性 |
說明 |
czxid |
節點建立時的zxid |
mzxid |
節點最新一次更新發生時的zxid |
ctime |
節點建立時的時間戳. |
mtime |
節點最新一次更新發生時的時間戳. |
dataVersion |
節點資料的更新次數. |
cversion |
其子節點的更新次數 |
aclVersion |
節點ACL(授權資訊)的更新次數. |
ephemeralOwner |
如果該節點為ephemeral節點, ephemeralOwner值表示與該節點繫結的session id. 如果該節點不是ephemeral節點, ephemeralOwner值為0. 至於什麼是ephemeral節點 |
dataLength |
節點資料的位元組數. |
numChildren |
子節點個數. |
Session會話:
客戶端來建立一個和zk服務端連線的控制代碼。
連線狀態:CONNECTING\CONNECTED\CLOSED
什麼是watcher
Watcher(事件監聽器),是Zookeeper中的一個很重要的特性。Zookeeper允許使用者在指定節點上註冊一些Watcher,並且在一些特定事件觸發的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去,該機制是Zookeeper實現分散式協調服務的重要特性。
Watcher:
KeeperState |
EventType |
觸發條件 |
說明 |
操作 |
SyncConnected |
None |
客戶端與服務端成功建立連線 |
此時客戶端和伺服器處於連線狀態 |
|
NodeCreated(1) |
Watcher監聽的對應資料節點被建立 |
Create |
||
NodeDeleted |
Watcher監聽的對應資料節點被刪除 |
Delete/znode |
||
NodeDataChanged |
Watcher監聽的對應資料節點的資料內容發生變更 |
setDate/znode |
||
NodeChildChanged |
Wather監聽的對應資料節點的子節點列表發生變更 |
Create/child |
||
Disconnected |
None |
客戶端與ZooKeeper伺服器斷開連線 |
此時客戶端和伺服器處於斷開連線狀態 |
|
Expired |
None |
會話超時 |
此時客戶端會話失效,通常同時也會受到SessionExpiredException異常 |
|
AuthFailed |
None |
通常有兩種情況,1:使用錯誤的schema進行許可權檢查 2:SASL許可權檢查失敗 |
通常同時也會收到AuthFailedException異常 |
介面
什麼是ACL
ACL(Access Control List)
內建的 ACL schemes:
world:預設方式,相當於全世界都能訪問
auth:代表已經認證通過的使用者(cli中可以通過addauth digest user:pwd 來添加當前上下文中的授權使用者)
digest:即使用者名稱:密碼這種方式認證,這也是業務系統中最常用的
ip:使用Ip地址認證
ACL支援許可權:
CREATE: 能建立子節點
READ:能獲取節點資料和列出其子節點
WRITE: 能設定節點資料
DELETE: 能刪除子節點
ADMIN: 能設定許可權
高效能
ZooKeeper 是高效能的。 在“讀”多於“寫”的應用程式中尤其地高效能,因為“寫”會導致所有的伺服器間同步狀態。(“讀”多於“寫”是協調服務的典型場景。)
順序訪問
對於來自客戶端的每個更新請求,ZooKeeper 都會分配一個全域性唯一的遞增編號,這個編號反應了所有事務操作的先後順序,應用程式可以使用 ZooKeeper 這個特性來實現更高層次的同步原語。 這個編號也叫做時間戳——zxid(Zookeeper Transaction Id)
Zookeeper的Java客戶端API
原生:
<dependency> |
org.apache.zookeeper.ZooKeeperMain
org.apache.zookeeper.CreateMode
ZkClient
<dependency> </dependency> |
Curator
<dependency> |
作業
Zookeeper原生的api操作zk
CRUD WATCHER znode節點玩下