前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Zookeeper系列(2):客户端基本命令与监听机制

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

作者头像
布禾
发布于 2021-04-28 03:20:20
发布于 2021-04-28 03:20:20
46500
代码可运行
举报
运行总次数:0
代码可运行
客户端基本命令
version

查看Zookeeper客户端版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 28] version 
ZooKeeper CLI version: 3.6.3--6401e4ad2087061bc6b9f80dec2d69f2e3c8660a, built on 04/08/2021 16:35 GMT
ls

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls [-s] [-w] [-R] path

显示指定节点的子节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 25] ls /
[zookeeper]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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

递归显示所有子孙节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 35] ls -R /
/
/zookeeper
/zookeeper/config
/zookeeper/quota
/zookeeper/temp1
create

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create [-s] [-e] [-c] [-t ttl] path [data] [acl]

创建持久节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 46] create /p_node mydata
Created /p_node

创建临时节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 57] create -e /e_node mydata
Created /e_node

创建持久顺序节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 59] create -s /ps_node mydata
Created /ps_node0000000005

创建临时顺序节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 61] create -s -e /es_node mydata
Created /es_node0000000006

创建容器节点:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 9]  create -c /container_node mydata
Created /container_node
stat

查看节点状态信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
get [-s] [-w] path

查看节点数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 1] get /p_node
mydata

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set [-s] [-v version] path data

更新节点数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 7] set /p_node data1
[zk: localhost:2181(CONNECTED) 8] get /p_node
data1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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 指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则更新失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 16] set -v 4 /p_node data0
[zk: localhost:2181(CONNECTED) 17] get /p_node
data0
delete

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete [-v version] path

删除节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 27] delete /temp
[zk: localhost:2181(CONNECTED) 28] get /temp
Node does not exist: /temp

delete也支持指定版本删除:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 27] delete -v 0 /temp
[zk: localhost:2181(CONNECTED) 28] get /temp
Node does not exist: /temp
deleteall

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 35] deleteall /temp
history

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 37] history
27 - delete -v 0 /temp
28 - get /temp
29 - ls /
...
getAllChildrenNumber

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 39] getAllChildrenNumber /
5
getEphemerals

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 49] getEphemerals /
[/temp2, /temp1]
sync

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 5] sync /
Sync is OK
quit

退出当前客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 6] quit 
监听机制

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

监听节点目录变化

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls -w path

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 71] ls -w /watchtest

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 73] create /watchtest/w1 data1

WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/watchtest
Created /watchtest/w1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 74] create /watchtest/w2 data1
Created /watchtest/w2
监听节点数据变化

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
get -w path

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 94] get -w /watchtest 
mydata2

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 95] set /watchtest mydata3

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/watchtest

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 96] set /watchtest mydata4
[zk: localhost:2181(CONNECTED) 97]
永久监听

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
addWatch [-m mode] path

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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:节点的数据变化以及所有子孙节点的目录或者数据变化都会触发相应事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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
删除节点的监听

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
removewatches path [-c|-d|-a] [-l]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[zk: localhost:2181(CONNECTED) 116] removewatches /watchtest 

WATCHER::

WatchedEvent state:SyncConnected type:PersistentWatchRemoved path:/watchtest

参考资料:

Zookeeper官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
3.Zookeeper常用Shell命令
查看节点列表有 ls path 和 ls2 path 两个命令,后者是前者的增强,不仅可以查看指定路径下的所有节点,还可以查看当前节点的信息。
每天进步一点点
2022/12/15
4070
zookeeper使用详解(命令、客户端、源码)
  zookeeper我们常用来做分布式协调中间件,很多时候我们都接触不到它的原理和用法,我对他的了解也仅限于知道它可以做分布式协调、配置管理、分布式锁,并且有个watch节点监听常常能听到。接下来我要系统的学下zookeeper的功能和原理,一起走进zookeeper的世界
老梁
2019/09/10
2.4K0
zookeeper使用详解(命令、客户端、源码)
zookeeper基本特性与基于Linux的ZK客户端命令行学习
这种创建方式创建出来的节点是持久化的,也就是持久节点(PERSISTENT)。所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。除了持久节点之外,我们还可以创建临时节点(EPHEMERAL),那么我们来看看如何创建临时节点:
端碗吹水
2020/09/23
1.1K0
Zookeeper入门到精通05——Zookeeper客户端命令行操作
不过,客户端连接的服务端是localhost,我们也可以通过: sh zkCli.sh -server host:port实现客户端与远程的服务端相连。
半旧518
2022/10/26
5290
Zookeeper入门到精通05——Zookeeper客户端命令行操作
zookeeper的shell命令使用
介绍zookeeper的shell命令 1.进入客户端命令行 --(1) 连接本地服务 [hadoop@hadoop01 ~]$ zkCli.sh [zk: localhost:2181(CONNECTED) 0] --(2) 连接其他节点服务 [hadoop@hadoop01 ~]$ zkCli.sh -server hadoop02:2181 [zk: hadoop02:2181(CONNECTED) 0] --(3) 连接其他节点服务 [hadoop@hadoop01 ~]$ zkCli.sh -
CoderJed
2018/09/13
1.1K0
Zookeeper 快速上手
官方是这么解释 Zookeeper的,它是一个分布式服务框架,是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
用户1212940
2020/03/18
5750
Zookeeper 快速上手
Zookeeper03之客户端命令操作
  前面两篇文章给大家介绍了zookeeper的集群搭建,本篇文章来介绍下zookeeper的客户端命令操作
用户4919348
2019/04/02
9970
Zookeeper03之客户端命令操作
看完这篇文章,还说自己不会使用Zookeeper命令吗
首先说明一下环境,溪源使用zookeeper版本为3.5.10;由于版本不同,命令语法略有差异,提前说明一下,但是基本原理一致,大家可以通过help命令查看自己当前版本的命令语法。
沁溪源
2020/09/03
2.4K0
快速学习-Zookeeper分布式安装部署
1.集群规划 在hadoop102、hadoop103和hadoop104三个节点上部署Zookeeper。 2.解压安装 (1)解压Zookeeper安装包到/opt/module/目录下
cwl_java
2020/03/25
4690
快速学习-Zookeeper分布式安装部署
Zookeeper学习笔记
Zookeeper是一个分布式应用程序协调服务,主要负责集中维护配置信息的服务,提供分布式的同步机制。其所有的服务都是做为其他分布式应用的基础。Zookeeper是Google Chubby的一个开源实现,是现在很多分布式应用的重要组件,包括诸如Hadoop、HBase、Kafka等,可以说现在Zookeeper是大家必须掌握的一门软件。
大江小浪
2019/04/17
4840
大数据技术之_06_Zookeeper学习_Zookeeper入门+Zookeeper安装+Zookeeper内部原理+Zookeeper实战(开发重点)+企业面试真题
  Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
黑泽君
2019/03/06
9120
zookeeper(2)——操作命令
ls path 查看某个路径下目录列表,ls / 查看根目录下有一个zookeeper的目录。 目录就是一个节点。/ 根节点 zookeeper是子节点
羊羽shine
2019/05/29
7870
Zookeeper 数据结构详解
https://zookeeper.apache.org/doc/current/zookeeperOver.html
斯武丶风晴
2020/05/26
1.8K0
zookeeper(3)——watcher
针对每个节点的操作,都会有一个监督者 watcher。 当监控的某个对象znode发生了变化,就会触发watcher事件 zk中的watch是一次性的,触发后立即销毁。 父节点,子节点增删改都能触发其watcher 针对不同类型的操作,触发的watcher事件也不同 1 节点创建事件 2 节点删除事件 3 节点数据变化事件
羊羽shine
2019/05/29
4210
zookeeper常用命令 - 雨中散步撒哈拉
包含c、c++、java、python、linux、html、php等上百本电子书!
雨中散步撒哈拉
2022/09/21
2050
Zookeeper节点知识点整理
(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为 LOOKING;
大忽悠爱学习
2021/12/07
4810
Zookeeper节点知识点整理
Zookeeper基础命令操作
安装参考链接https://blog.csdn.net/qiunian144084/article/details/79192819
chenchenchen
2019/09/02
2.1K0
使用ZooKeeper提供的原生Java API操作ZooKeeper节点
我们先来创建一个普通的maven工程,然后在pom.xml文件中配置zookeeper依赖:
端碗吹水
2020/09/23
1.4K0
ZooKeeper CLI
ZooKeeper 命令行界面(CLI)用于与 ZooKeeper 集合进行交互以进行开发。它有助于调试和解决不同的选项。要执行 ZooKeeper CLI 操作,首先打开 ZooKeeper 服务器(bin/zkServer.sh start),然后打开 ZooKeeper 客户端(bin/zkCli.sh)。客户端启动后,你就可以执行以下操作:
smartsi
2019/11/27
1.1K0
zookeeper-03 命令行操作
在3台机器分别部署了zookeeper-3.4.5,本文操作是在此基础上进行的。部署详情参见上一篇文章
踏歌行
2020/10/15
3000
相关推荐
3.Zookeeper常用Shell命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档