VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Zookeeper系列(2):客户端基本命令与监听机制

客户端基本命令

version

查看Zookeeper客户端版本:


Copy
[zk: localhost:2181(CONNECTED) 28] version ZooKeeper CLI version: 3.6.3--6401e4ad2087061bc6b9f80dec2d69f2e3c8660a, built on 04/08/2021 16:35 GMT
ls

语法:


Copy
ls [-s] [-w] [-R] path

显示指定节点的子节点:


Copy
[zk: localhost:2181(CONNECTED) 25] ls / [zookeeper]

显示指定节点的子节点以及指定节点的状态信息:


Copy
[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

递归显示所有子孙节点:


Copy
[zk: localhost:2181(CONNECTED) 35] ls -R / / /zookeeper /zookeeper/config /zookeeper/quota /zookeeper/temp1
create

默认不带参数就是创建持久节点,节点数据是可选的,可以创建节点时指定,也可以不指定。

语法:


Copy
create [-s] [-e] [-c] [-t ttl] path [data] [acl]

创建持久节点:


Copy
[zk: localhost:2181(CONNECTED) 46] create /p_node mydata Created /p_node

创建临时节点:


Copy
[zk: localhost:2181(CONNECTED) 57] create -e /e_node mydata Created /e_node

创建持久顺序节点:


Copy
[zk: localhost:2181(CONNECTED) 59] create -s /ps_node mydata Created /ps_node0000000005

创建临时顺序节点:


Copy
[zk: localhost:2181(CONNECTED) 61] create -s -e /es_node mydata Created /es_node0000000006

创建容器节点:

当容器节点的最后一个子元素被删除时,该容器节点将会被删除。


Copy
[zk: localhost:2181(CONNECTED) 9] create -c /container_node mydata Created /container_node
stat

查看节点状态信息:


Copy
[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

语法:


Copy
get [-s] [-w] path

查看节点数据:


Copy
[zk: localhost:2181(CONNECTED) 1] get /p_node mydata

查看节点数据以及节点状态信息:


Copy
[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

语法:


Copy
set [-s] [-v version] path data

更新节点数据:


Copy
[zk: localhost:2181(CONNECTED) 7] set /p_node data1 [zk: localhost:2181(CONNECTED) 8] get /p_node data1

更新节点数据并显示节点状态信息:


Copy
[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 指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则更新失败。


Copy
[zk: localhost:2181(CONNECTED) 16] set -v 4 /p_node data0 [zk: localhost:2181(CONNECTED) 17] get /p_node data0
delete

delete命令只能删除没有子节点的节点。

语法:


Copy
delete [-v version] path

删除节点:


Copy
[zk: localhost:2181(CONNECTED) 27] delete /temp [zk: localhost:2181(CONNECTED) 28] get /temp Node does not exist: /temp

delete也支持指定版本删除:


Copy
[zk: localhost:2181(CONNECTED) 27] delete -v 0 /temp [zk: localhost:2181(CONNECTED) 28] get /temp Node does not exist: /temp
deleteall

删除节点以及所有子孙节点:


Copy
[zk: localhost:2181(CONNECTED) 35] deleteall /temp
history

显示最近执行的11条命令的历史记录:


Copy
[zk: localhost:2181(CONNECTED) 37] history 27 - delete -v 0 /temp 28 - get /temp 29 - ls / ...
getAllChildrenNumber

获取节点下的所有子孙节点数量:


Copy
[zk: localhost:2181(CONNECTED) 39] getAllChildrenNumber / 5
getEphemerals

获取当前客户端创建的所有临时节点:


Copy
[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]

获取当前客户端在指定节点下创建的所有临时节点:


Copy
[zk: localhost:2181(CONNECTED) 49] getEphemerals / [/temp2, /temp1]
sync

在leader和follower之间同步一个节点的数据(异步执行):


Copy
[zk: localhost:2181(CONNECTED) 5] sync / Sync is OK
quit

退出当前客户端


Copy
[zk: localhost:2181(CONNECTED) 6] quit

监听机制

客户端可以监听节点的变化,当节点发生改变时,将触发相应的事件。当事件被触发时,客户端会收到一个数据包,说明节点已经改变。

监听节点目录变化

监听节点的子节点变化,当子节点发生改变时触发。

语法:


Copy
ls -w path

创建/watchtest节点的目录监听:


Copy
[zk: localhost:2181(CONNECTED) 71] ls -w /watchtest

创建/watchtest节点的子节点来触发事件:


Copy
[zk: localhost:2181(CONNECTED) 73] create /watchtest/w1 data1 WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtest Created /watchtest/w1

一次性监听,触发后会被删除,无法再次触发:


Copy
[zk: localhost:2181(CONNECTED) 74] create /watchtest/w2 data1 Created /watchtest/w2
监听节点数据变化

监听节点数据变化,当节点数据发生改变时触发。

语法:


Copy
get -w path

创建/watchtest节点的数据监听:


Copy
[zk: localhost:2181(CONNECTED) 94] get -w /watchtest mydata2

更新/watchtest节点数据来触发事件:


Copy
[zk: localhost:2181(CONNECTED) 95] set /watchtest mydata3 WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest

一次性监听,触发后会被删除,无法再次触发:


Copy
[zk: localhost:2181(CONNECTED) 96] set /watchtest mydata4 [zk: localhost:2181(CONNECTED) 97]
永久监听

在Zookeeper 3.6.0版本之后,客户端可以在节点上创建永久监听,永久监听在被触发后不会被删除。

语法:


Copy
addWatch [-m mode] path

永久监听在创建时可以通过 -m 指定模式,模式分为两种:PERSISTENT和PERSISTENT_RECURSIVE,不指定默认使用PERSISTENT_RECURSIVE模式。

PERSISTENT:节点的数据变化以及子节点的变化会触发相应事件,子节点的数据变化不会触发。


Copy
[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:节点的数据变化以及所有子孙节点的目录或者数据变化都会触发相应事件。


Copy
[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
删除节点的监听

语法:


Copy
removewatches path [-c|-d|-a] [-l]

无论是一次性监听还是永久监听都可以removewatches删除。


Copy
[zk: localhost:2181(CONNECTED) 116] removewatches /watchtest WATCHER:: WatchedEvent state:SyncConnected type:PersistentWatchRemoved path:/watchtest

原文:https://www.cnblogs.com/seve/p/14701705.html


相关教程