Zookeeper学习笔记-入门(2)-客户端操作以及应用举例

客户端命令行操作

命令列表

Zookeeper中对数据的操作就是对ZNode的操作,主要包括ZNode的增删改查等操作。并且前面我们也提到,ZNode分为持久节点和非持久节点,并且节点也可以指定序列属性。

命令 功能描述
help 显示所有操作命令
ls [path] 使用ls命令来查看当前ZNode的子节点
-w:监听子节点变化
-s:附加次级信息
create [path] [data] 创建节点并指定节点数据
-s:设置节点序列属性
-e:创建临时节点
get [path] 获得节点的值
-w:监听节点内容变化
-s:附加次级信息
set [path] [data] 设置节点的具体值
stat [path] 查看节点状态
delete [path] 删除节点
deleteall [path] 递归删除节点

首先我们启动客户端的时候可以指定连接对应的server,之后就可以进行相应的操作

1
bin/zkCli.sh -server hadoop102:2181

查看Znode中包含的信息,如果设置了-s属性,会输出当前节点的详细数据,包括如下的信息:

  • czxid:创建节点的事务zxid
  • ctime:ZNode被创建时的时间戳(从1970年开始)
  • mzxid:ZNode最后更新时的事务zxid
  • mtime:ZNode最后修改的时间戳
  • pZxid:ZNode最后更新的子节点zxid
  • cversion:ZNode子节点变化号,ZNode子节点修改次数
  • dataversion:ZNode数据变化号
  • aclVersion:ZNode访问控制列表的变化号
  • ephemeralOwner:如果是临时节点,则为ZNode拥有者的Session ID,否则为0
  • dataLength:ZNode的数据长度
  • numChildren:ZNode子节点数量

监听器

客户端连接到Zookeeper之后,可以在客户端上注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增减)时,Zookeeper就会通知客户端。监听机制保证了Zookeeper上保存的任何数据的任何改变都能快速地响应,提示监听了该节点的应用程序,常见的监听包括监听节点数据的变化和监听子节点的增减:

1
2
3
4
5
# 监听节点数据的变化
get -w [path]

# 监听子节点增减的变化
ls -w [path]

监听器实现原理如下:

  1. 首先在客户端上有一个main线程
  2. 在main线程中创建Zookeeper客户端,这时候就会创建两个线程,一个负责网络连接通信(connect),另一个负责监听(listener)
  3. 通过connect线程将注册的监听事件发送给Zookeeper
  4. 在Zookeeper的注册监听器列表中添加对应的监听事件
  5. Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
  6. 之后listener线程内部调用process方法

但是特别需要注意的是,Zookeeper中监听器注册一次只能监听一次变化,想要再次监听,则需要再次注册

Java API操作

API举例

数据写入流程

应用案例

服务器动态上下线

分布式锁


Zookeeper学习笔记-入门(2)-客户端操作以及应用举例
https://evernorif.github.io/2022/07/07/Zookeeper学习笔记-入门-2-客户端操作以及应用举例/
作者
EverNorif
发布于
2022年7月7日
许可协议