客戶端基本命令
version
查看Zookeeper客戶端版本:
[zk: localhost:2181(CONNECTED) 28] version
ZooKeeper CLI version: 3.6.3--6401e4ad2087061bc6b9f80dec2d69f2e3c8660a, built on 04/08/2021 16:35 GMT
ls
語法:
ls [-s] [-w] [-R] path
顯示指定節點的子節點:
[zk: localhost:2181(CONNECTED) 25] ls /
[zookeeper]
顯示指定節點的子節點以及指定節點的狀態資訊:
[zk: localhost:2181(CONNECTED) 33] ls -s /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
遞回顯示所有子孫節點:
[zk: localhost:2181(CONNECTED) 35] ls -R /
/
/zookeeper
/zookeeper/config
/zookeeper/quota
/zookeeper/temp1
create
默認不帶引數就是創建持久節點,節點資料是可選的,可以創建節點時指定,也可以不指定,
語法:
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
創建持久節點:
[zk: localhost:2181(CONNECTED) 46] create /p_node mydata
Created /p_node
創建臨時節點:
[zk: localhost:2181(CONNECTED) 57] create -e /e_node mydata
Created /e_node
創建持久順序節點:
[zk: localhost:2181(CONNECTED) 59] create -s /ps_node mydata
Created /ps_node0000000005
創建臨時順序節點:
[zk: localhost:2181(CONNECTED) 61] create -s -e /es_node mydata
Created /es_node0000000006
創建容器節點:
當容器節點的最后一個子元素被洗掉時,該容器節點將會被洗掉,
[zk: localhost:2181(CONNECTED) 9] create -c /container_node mydata
Created /container_node
stat
查看節點狀態資訊:
[zk: localhost:2181(CONNECTED) 46] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x18
cversion = 6
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 4
cZxid:創建節點的zxid,
ctime:創建節點的時間(從1970年開始),
mZxid:節點最后更新的zxid,
mtime:節點最后更新的時間(從1970年開始),
pZxid:節點最后更新的子節點zxid,
cversion:子節點被更改的次數,子節點的變化都會導致該值遞增,
dataVersion:資料被更改的次數,每次資料變化都會導致該值遞增,
aclVersion:ACL更改次數,每次ACL的變更都會導致該值遞增,
ephemeralOwner:如果節點是一個臨時節點,則該值為會話ID,如果節點不是臨時節點,則該值為0,
dataLength:節點資料長度,
numChildren:節點的子節點數量,
get
語法:
get [-s] [-w] path
查看節點資料:
[zk: localhost:2181(CONNECTED) 1] get /p_node
mydata
查看節點資料以及節點狀態資訊:
[zk: localhost:2181(CONNECTED) 5] get -s /p_node
mydata
cZxid = 0x3
ctime = Thu Apr 22 15:56:50 CST 2021
mZxid = 0x3
mtime = Thu Apr 22 15:56:50 CST 2021
pZxid = 0x3
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
set
語法:
set [-s] [-v version] path data
更新節點資料:
[zk: localhost:2181(CONNECTED) 7] set /p_node data1
[zk: localhost:2181(CONNECTED) 8] get /p_node
data1
更新節點資料并顯示節點狀態資訊:
[zk: localhost:2181(CONNECTED) 11] set -s /p_node data3
cZxid = 0x3
ctime = Thu Apr 22 15:56:50 CST 2021
mZxid = 0x9
mtime = Thu Apr 22 16:04:26 CST 2021
pZxid = 0x3
cversion = 0
dataVersion = 4
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 12] get /p_node
data3
使用CAS更新節點資料:
-v 指定資料版本號,如果指定的資料版本號和資料當前版本號不一致,則更新失敗,
[zk: localhost:2181(CONNECTED) 16] set -v 4 /p_node data0
[zk: localhost:2181(CONNECTED) 17] get /p_node
data0
delete
delete命令只能洗掉沒有子節點的節點,
語法:
delete [-v version] path
洗掉節點:
[zk: localhost:2181(CONNECTED) 27] delete /temp
[zk: localhost:2181(CONNECTED) 28] get /temp
Node does not exist: /temp
delete也支持指定版本洗掉:
[zk: localhost:2181(CONNECTED) 27] delete -v 0 /temp
[zk: localhost:2181(CONNECTED) 28] get /temp
Node does not exist: /temp
deleteall
洗掉節點以及所有子孫節點:
[zk: localhost:2181(CONNECTED) 35] deleteall /temp
history
顯示最近執行的11條命令的歷史記錄:
[zk: localhost:2181(CONNECTED) 37] history
27 - delete -v 0 /temp
28 - get /temp
29 - ls /
...
getAllChildrenNumber
獲取節點下的所有子孫節點數量:
[zk: localhost:2181(CONNECTED) 39] getAllChildrenNumber /
5
getEphemerals
獲取當前客戶端創建的所有臨時節點:
[zk: localhost:2181(CONNECTED) 42] create -e /temp1 mydata1
Created /temp1
[zk: localhost:2181(CONNECTED) 43] create -e /temp2 mydata2
Created /temp2
[zk: localhost:2181(CONNECTED) 44] getEphemerals
[/temp2, /temp1]
獲取當前客戶端在指定節點下創建的所有臨時節點:
[zk: localhost:2181(CONNECTED) 49] getEphemerals /
[/temp2, /temp1]
sync
在leader和follower之間同步一個節點的資料(異步執行):
[zk: localhost:2181(CONNECTED) 5] sync /
Sync is OK
quit
退出當前客戶端
[zk: localhost:2181(CONNECTED) 6] quit
監聽機制
客戶端可以監聽節點的變化,當節點發生改變時,將觸發相應的事件,當事件被觸發時,客戶端會收到一個資料包,說明節點已經改變,
監聽節點目錄變化
監聽節點的子節點變化,當子節點發生改變時觸發,
語法:
ls -w path
創建/watchtest節點的目錄監聽:
[zk: localhost:2181(CONNECTED) 71] ls -w /watchtest
創建/watchtest節點的子節點來觸發事件:
[zk: localhost:2181(CONNECTED) 73] create /watchtest/w1 data1
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtest
Created /watchtest/w1
一次性監聽,觸發后會被洗掉,無法再次觸發:
[zk: localhost:2181(CONNECTED) 74] create /watchtest/w2 data1
Created /watchtest/w2
監聽節點資料變化
監聽節點資料變化,當節點資料發生改變時觸發,
語法:
get -w path
創建/watchtest節點的資料監聽:
[zk: localhost:2181(CONNECTED) 94] get -w /watchtest
mydata2
更新/watchtest節點資料來觸發事件:
[zk: localhost:2181(CONNECTED) 95] set /watchtest mydata3
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest
一次性監聽,觸發后會被洗掉,無法再次觸發:
[zk: localhost:2181(CONNECTED) 96] set /watchtest mydata4
[zk: localhost:2181(CONNECTED) 97]
永久監聽
在Zookeeper 3.6.0版本之后,客戶端可以在節點上創建永久監聽,永久監聽在被觸發后不會被洗掉,
語法:
addWatch [-m mode] path
永久監聽在創建時可以通過 -m 指定模式,模式分為兩種:PERSISTENT和PERSISTENT_RECURSIVE,不指定默認使用PERSISTENT_RECURSIVE模式,
PERSISTENT:節點的資料變化以及子節點的變化會觸發相應事件,子節點的資料變化不會觸發,
[zk: localhost:2181(CONNECTED) 124] addWatch -m PERSISTENT /watchtest
[zk: localhost:2181(CONNECTED) 125] set /watchtest mydata100
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest
[zk: localhost:2181(CONNECTED) 126] create /watchtest/w1
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtest
Created /watchtest/w1
[zk: localhost:2181(CONNECTED) 127] delete /watchtest/w1
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtest
PERSISTENT_RECURSIVE:節點的資料變化以及所有子孫節點的目錄或者資料變化都會觸發相應事件,
[zk: localhost:2181(CONNECTED) 129] addWatch -m PERSISTENT_RECURSIVE /watchtest
[zk: localhost:2181(CONNECTED) 130] ls /watchtest
[]
[zk: localhost:2181(CONNECTED) 131] set /watchtest mydata101
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest
[zk: localhost:2181(CONNECTED) 132] create /watchtest/w1
WATCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/watchtest/w1
Created /watchtest/w1
[zk: localhost:2181(CONNECTED) 133] create /watchtest/w1/w1_1
WATCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/watchtest/w1/w1_1
Created /watchtest/w1/w1_1
[zk: localhost:2181(CONNECTED) 134] set /watchtest/w1/w1_1 data101
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest/w1/w1_1
洗掉節點的監聽
語法:
removewatches path [-c|-d|-a] [-l]
無論是一次性監聽還是永久監聽都可以removewatches洗掉,
[zk: localhost:2181(CONNECTED) 116] removewatches /watchtest
WATCHER::
WatchedEvent state:SyncConnected type:PersistentWatchRemoved path:/watchtest
參考資料:
Zookeeper官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280607.html
標籤:其他
上一篇:pandas 基本操作
下一篇:Java后端知識體系
