2021年4月26日星期一

Zookeeper系列(2):客户端基本命令与监听机制

客户端基本命令

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 = 0x0ctime = Thu Jan 01 08:00:00 CST 1970mZxid = 0x0mtime = Thu Jan 01 08:00:00 CST 1970pZxid = 0x0cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 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 mydataCreated /p_node

创建临时节点:

[zk: localhost:2181(CONNECTED) 57] create -e /e_node mydataCreated /e_node

创建持久顺序节点:

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

创建临时顺序节点:

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

创建容器节点:

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

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

查看节点状态信息:

[zk: localhost:2181(CONNECTED) 46] stat /cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970mZxid = 0x0mtime = Thu Jan 01 08:00:00 CST 1970pZxid = 0x18cversion = 6dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 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_nodemydata

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

[zk: localhost:2181(CONNECTED) 5] get -s /p_nodemydatacZxid = 0x3ctime = Thu Apr 22 15:56:50 CST 2021mZxid = 0x3mtime = Thu Apr 22 15:56:50 CST 2021pZxid = 0x3cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 6numChildren = 0
set

语法:

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

更新节点数据:

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

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

[zk: localhost:2181(CONNECTED) 11] set -s /p_node data3cZxid = 0x3ctime = Thu Apr 22 15:56:50 CST 2021mZxid = 0x9mtime = Thu Apr 22 16:04:26 CST 2021pZxid = 0x3cversion = 0dataVersion = 4aclVersion = 0ephemeralOwner = 0x0dataLength = 5numChildren = 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_nodedata0
delete

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

语法:

delete [-v version] path

删除节点:

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

delete也支持指定版本删除:

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

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

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

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

[zk: localhost:2181(CONNECTED) 37] history27 - delete -v 0 /temp28 - get /temp29 - 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 data1WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtestCreated /watchtest/w1

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

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

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

语法:

get -w path

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

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

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

[zk: localhost:2181(CONNECTED) 95] set /watchtest mydata3WATCHER::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 mydata100WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest[zk: localhost:2181(CONNECTED) 126] create /watchtest/w1WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtestCreated /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 mydata101WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest[zk: localhost:2181(CONNECTED) 132] create /watchtest/w1WATCHER::WatchedEvent state:SyncConnected type:NodeCreated path:/watchtest/w1Created /watchtest/w1[zk: localhost:2181(CONNECTED) 133] create /watchtest/w1/w1_1WATCHER::WatchedEvent state:SyncConnected type:NodeCreated path:/watchtest/w1/w1_1Created /watchtest/w1/w1_1[zk: localhost:2181(CONNECTED) 134] set /watchtest/w1/w1_1 data101WATCHER::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官方文档









原文转载:http://www.shaoqun.com/a/710748.html

跨境电商:https://www.ikjzd.com/

母婴团购网:https://www.ikjzd.com/w/716

灯塔计划:https://www.ikjzd.com/w/1281


客户端基本命令version查看Zookeeper客户端版本:[zk:localhost:2181(CONNECTED)28]versionZooKeeperCLIversion:3.6.3--6401e4ad2087061bc6b9f80dec2d69f2e3c8660a,builton04/08/202116:35GMTls语法:ls[-s][-w][-R]path显示指定节点的子节点:[zk
bestbuy:https://www.ikjzd.com/w/394
转运中国:https://www.ikjzd.com/w/1549
打折网:https://www.ikjzd.com/w/74
阿里网交会隐藏的"黑科技",让全球看清"新外贸"的模样:https://www.ikjzd.com/home/124740
亚马逊怎么样获取更多review?:https://www.ikjzd.com/home/98396
疫情过去,口罩不是刚需,那么下一个爆款是?:https://www.ikjzd.com/home/117815

没有评论:

发表评论

跨境电商资讯:外贸宣传平台有哪些(出口的

现在很多做外贸的人都非常关注 外贸企业怎么推广 ,而现在推广的途径和平台有很多,企业如果都做,成本和时间精力是一个问题,而且并不是所有的推广渠道都是有用的。今天云程网络就来为大家盘点几个有效的外贸推广渠道。 一、海外社交媒体营销 Facebook,领英等海外社交媒体营销在近几年得...