一文了解ZooKeeper基础命令和应用

ZooKeeper基础命令和应用

本文ZooKeeper版本:3.8.0

通过终端在zookeeper的bin打开新的session会话

ajisun@ajisun-2 bin> sh zkCli.sh

随便输入一些命令之后就会出现ZooKeeper的命令列表,如下


下面详细介绍下主要API的使用

config

config

查看仲裁成员的配置

[zk: 1] config
server.1=127.0.0.1:2888:3888:participant server.2=127.0.0.1:2898:3898:participant server.3=127.0.0.1:2988:3988:participant version=0 

ls

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

查看某个节点下的节点列表

  • -s: 显示节点信息数据
  • -w: 设置监听
  • -R: 递归展示子节点
  • path:某一节点名
# 获取根节点列表 [zk: 4] ls /
[ajisun, zookeeper] # 显示根节点数据 [zk: 5] ls -s /
[ajisun, zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x40000000a
cversion = 36
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2 # 递归展示根节点下的所有子节点 [zk: 6] ls -R /
/
/ajisun
/zookeeper
/zookeeper/config
/zookeeper/quota # 添加监听,当子节点发生变更的时候输出信息 [zk: 7] ls /
[ajisun, zookeeper]
[zk: 8] create /ajisun/01
Created /ajisun/01
[zk: 9] ls -w /ajisun
[01]
[zk: 10] delete /ajisun/01
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/ajisun

如下命令代表查询的根节点下的所有节点


create

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

创建一个节点

  • -s: 顺序节点
  • -e: 临时节点
  • -c: 容器节点
  • -t: ttl节点(有过期时间的节点)
  • data: 存储在节点上的数据
  • acl: 访问权限相关,默认全部可见
# 创建持久化节点 /ajisun
[zk: 6] create /ajisun 
Created /ajisun

# 创建持久化顺序节点 /ajisun(相同的节点名是自动加上了递增的序号来保证顺序的)
[zk: 7] create -s /ajisun data
Created /ajisun0000000005
[zk: 8] create -s /ajisun data
Created /ajisun0000000006

# 创建临时节点 /ajisun_ephemeral(当这个session连接断开的时候就会删除此节点)
[zk: 9] create -e /ajisun_e data
Created /ajisun_e

# 创建顺序临时节点 /ajisun_s_e 
[zk: 10] create -s -e /ajisun_s_e data
Created /ajisun_s_e0000000008
[zk: 11] create -s -e /ajisun_s_e data
Created /ajisun_s_e0000000009

# 创建容器节点(当容器节点的最后一个子节点被删除,此容器会被删除,但是并不是立即删除)
[zk: 34] create -c /ajisun_c data
Created /ajisun_c
[zk: 35] create -c /ajisun_c/01 data
Created /ajisun_c/01 [zk: 36] ls /ajisun_c
[01]
[zk: 37] delete /ajisun_c/01 [zk: 38] get /ajisun_c
data
[zk: 39] get /ajisun_c
Node does not exist: /ajisun_c

# 创建有过期时间的节点
# 需要在配置文件zoo.cfg中手动开启这个功能,增加配置 extendedTypesEnabled=true [zk: 40] create -t 3000 /ajisun_t data
Created /ajisun_t [zk: 41] get /ajisun_t data
[zk: 42] get /ajisun_t Node does not exist: /ajisun_t 

get

get [-s] [-w] path

获取节点数据

  • -s: 显示节点信息
  • -w: 设置监听,节点发生变化的时候有监听信息输出
[zk: 45] create /ajisun 纪先生笔记
Created /ajisun # 直接获取节点数据 [zk: 46] get /ajisun # 显示节点数据信息 [zk: 47] get -s /ajisun # 节点内容数据 cZxid = 0x400000015 # 节点创建的事务ID(序号递增,每次create操作都会+1,创建session也会+1) ctime = Thu Apr 28 17:09:13 CST 2022 # 节点创建的时间 mZxid = 0x400000015 # 节点最后一个更新时的事务ID mtime = Thu Apr 28 17:09:13 CST 2022 # 节点最后一次更新的时间 pZxid = 0x400000015 # 节点的子节点最后一次被修改的事务ID cversion = 0 # 节点的版本号,更改次数 dataVersion = 0 # 节点数据的版本号  aclVersion = 0 # 节点ACL的更改次数 ephemeralOwner = 0x0 # 如果是临时节点,则表示该节点的会话session ID;如果是持久化节点,则是0 dataLength = 15 # 节点数据的长度 numChildren = 0 # 当前节点的子节点数 # 节点设置监听,然后更改节点的数据 [zk: 48] get -w /ajisun

[zk: 49] set /ajisun 
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/ajisun
[zk: 50] get /ajisun

delete

delete [-v version] path

删除节点(可以根据版本号删除)

  • -v version : 版本号
  • path: 节点路径
# 直接删除节点 /ajisun/02 [zk: 54] ls /ajisun
[01, 02]
[zk: 55] delete /ajisun/02 [zk: 56] ls /ajisun
[01] #指定版本删除节点 /ajisun/01 # 查看节点信息 [zk: 57] ls -s /ajisun/01 ......
dataVersion = 0 # 此时版本是0 ...... # 更新节点信息 并查看 [zk: 58] set /ajisun/01 ajisun01-01 [zk: 59] ls -s /ajisun/01 ......
dataVersion = 1 ...... # 指定不存在的版本号删除,删除失败 [zk: 60] delete -v 0 /ajisun/01 version No is not valid : /ajisun/01 # 指定正确版本号删除,删除成功 [zk: 61] delete -v 1 /ajisun/01 [zk: 62] ls /ajisun
[]

deleteall

deleteall path

删除指定路径下的所有节点

  • path:节点路径
[zk: 64] ls /
[ajisun, zookeeper] # 删除 /ajisun节点 [zk: 65] deleteall /ajisun
[zk: 66] ls /
[zookeeper]

set

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

更新指定节点的数据

  • -s:显示节点信息
  • -v version:指定版本(通过 CAS设置)
  • path:节点路径
[zk: 77] create /ajisun 纪先生
Created /ajisun # 设置并显示节点信息 [zk: 78] set -s /ajisun 纪先生01
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x40000001f
mtime = Sun May 01 11:23:32 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 1 # 数据版本变成1 aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0 # 设置0版本失败 [zk: 79] set -v 0 /ajisun 纪先生02
version No is not valid : /ajisun # 设置1版本 成功 [zk: 80] set -s  -v 1 /ajisun 纪先生02
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x400000021
mtime = Sun May 01 11:28:05 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 2 # 版本号+1 aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
复制代码

stat

stat [-w] path

查看节点的状态信息

  • -w:对节点设置监听
  • path:节点路径
# 查看节点 /ajisun 信息 [zk: 90] stat /ajisun
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x400000021
mtime = Sun May 01 11:28:05 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0 # 节点设置监听(会话一) [zk: 91] stat -w /ajisun
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x400000022
mtime = Sun May 01 14:58:59 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0 # 变更节点(会话二) [zk: 0] set /ajisun ajisun-stat # 收到通知(会话一) [zk: 92] 
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/ajisun

removewatches

removewatches path

移除监听

# 设置监听 [zk: 93] get -w /ajisun
ajisun-stat # 移除监听 [zk: 94] removewatches  /ajisun

WATCHER::
WatchedEvent state:SyncConnected type:DataWatchRemoved path:/ajisun

history 和 redo

history

查看最近执行的11个命令

redo cmdno

重新执行某命令

# 历史cmd记录 [zk: 94] history 0 - stat -w /ajisun
1 - get /ajisun
2 - get -s /ajisun
3 - get -s /ajisun
4 - create /ajisun/01 01
5 - get -s /ajisun
6 - llll
7 - set -w /ajisun 
8 - get -w /ajisun
9 - removewatches  /ajisun
10 - history # 重做1命令 [zk: 95] redo 1
ajisun-stat

以上是常用命令的详细说明和使用方式,包括增删改查以及设置监听等命令

#Java##ZooKeeper入门学习##程序员#
全部评论
收藏了 ,希望能用上
1 回复 分享
发布于 2022-08-08 16:48

相关推荐

点赞 评论 收藏
分享
03-27 16:40
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21 文远知行笔试,半年多没刷算法题 ->挂 (后续HR说春招可以重新安排笔试)2026.2.4     小鹏汇天 技术一面,第二周收到结果 ->挂2026.2.12   大众Cariad代招 技术二面 ->Offer2026.2.28   多益网络技术面试,由于风评太差,一直在犹豫要不要接面试 ->推迟-----------分割线-----------2026.3 月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6 从上家公司实习离职,氛围最好的一家公司,leader 说可以帮忙转正,但是流程太长,而且我们部门据说只有一个 hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9 入职新公司,大众Cariad 以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10 电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了 12 号晚上的机票回成都2026.3.15 参加国家电网计算机类笔试2026.3.17 电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18 收到电网面试通知,通知 3.22-3.25 这个时间去面试,我的岗位只招 1 个人。据说面试只有 2-3 人,不知道能不能成功----------分割线-----------2026.3.21 电网面试结束,感觉回答的还勉勉强强,大概是2个岗位分别招1个人,一共11人面试,实际来了9人2026.3.27 出面试成绩,满分100分,早上10:20左右发现面试成绩46,我震惊了,没截图,后面过了十分钟重新看发现面试成绩给我改成58了。但同样震惊。朋友问我是不是把面试官打了,哈哈
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务