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 | |
查看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 | |
监听器实现原理如下:
- 首先在客户端上有一个main线程
- 在main线程中创建Zookeeper客户端,这时候就会创建两个线程,一个负责网络连接通信(connect),另一个负责监听(listener)
- 通过connect线程将注册的监听事件发送给Zookeeper
- 在Zookeeper的注册监听器列表中添加对应的监听事件
- Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
- 之后listener线程内部调用process方法
但是特别需要注意的是,Zookeeper中监听器注册一次只能监听一次变化,想要再次监听,则需要再次注册。
Java API操作
API举例
数据写入流程
应用案例
服务器动态上下线
分布式锁
Zookeeper学习笔记-入门(2)-客户端操作以及应用举例
https://evernorif.github.io/2022/07/07/Zookeeper学习笔记-入门-2-客户端操作以及应用举例/