zookeeper客户端命令行操作、节点类型及监听器
文档
- linux安装java -centos安装java -linux配置java环境变量
- zookeeper单机安装
- zookeeper集群安装
- zookeeper客户端命令行操作、节点类型及监听器
- zookeeper集群写数据原理
- java操作zookeeper
启动zookeeper客户端
-
启动客户端,默认服务器为localhost
shell./zkCli.sh
输出信息:
[zk: localhost:2181(CONNECTED) 0]
-
启动客户端,指定服务器
shell./zkCli.sh -server 192.168.145.132:2181
输出信息:
[zk: 192.168.145.132:2181(CONNECTED) 0]
-
退出
shellquit
节点类型
properties
持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除
持久有序号节点
持久无序号节点
短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自动删除
临时有序号节点
临时无序号节点
有序号节点
节点名称后拼接顺序编号
创建有序号节点命令(节点名称相同)可重复执行,节点名称后拼接的顺序编号增大
重复执行实际是创建不同的节点,前缀相同,后面的顺序编号不同
创建有序号节点时,节点名称后会拼接顺序编号,顺序号是一个单调递增的计数器,由父节点维护
发现:自增的序号与父节点下子节点的数量有关,并且无论子节点是否有序号
使用场景:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
客户端命令行操作命令示例
-
查看
/
节点下的子节点shellls /
输出信息
properties[zookeeper]
-
查看
/
节点下的子节点,及当前节点的详细信息shellls -s /
输出信息
properties# 创建节点的事务id,[zookeeper]为子节点列表 [zookeeper]cZxid = 0x0 # znode被创建时的毫秒值(从1970年开始) ctime = Thu Jan 01 08:00:00 CST 1970 # znode最后更新的事务id mZxid = 0x0 # znode最后修改的毫秒值(从1970年开始) mtime = Thu Jan 01 08:00:00 CST 1970 # znode最后更新的子节点zxid pZxid = 0x0 # znode子节点变化的版本,znode子节点修改次数 cversion = -1 # znode数据变化的版本 dataVersion = 0 # znode访问控制列表的变化号 aclVersion = 0 # 如果是临时节点,这个是znode拥有者的session id,如果不是临时节点则是0 ephemeralOwner = 0x0 # znode的数据长度 dataLength = 0 # znode子节点数量 numChildren = 1
-
创建一个永久节点:
/sanguo
,节点信息:diaochan
shellcreate /sanguo "diaochan"
-
创建一个永久节点:
/sanguo/shuguo
,节点信息:liubei
shellcreate /sanguo/shuguo "liubei"
输出信息
propertiesCreated /sanguo/shuguo
-
查看
/sanguo
节点信息shellget /sanguo
输出信息
propertiesdiaochan
-
查看
/sanguo
节点详细信息shellget -s /sanguo
输出信息
propertiesdiaochan cZxid = 0x100000004 ctime = Sat Aug 24 17:25:32 CST 2024 mZxid = 0x100000004 mtime = Sat Aug 24 17:25:32 CST 2024 pZxid = 0x100000005 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 1
-
创建一个永久节点:
/sanguo/weiguo
,节点信息:caocao
shellcreate /sanguo/weiguo "caocao"
-
创建一个带序号的永久节点:
/sanguo/weiguo/zhangliao
shellcreate -s /sanguo/weiguo/zhangliao "zhangliao"
输出信息
propertiesCreated /sanguo/weiguo/zhangliao0000000000
-
带序号的节点可重复创建,创建相同的节点:
/sanguo/weiguo/zhangliao
shellcreate -s /sanguo/weiguo/zhangliao "zhangliao"
输出信息
propertiesCreated /sanguo/weiguo/zhangliao0000000001
-
创建一个临时节点:
/sanguo/wuguo
,节点信息:zhouyu
shellcreate -e /sanguo/wuguo "zhouyu"
输出信息
propertiesCreated /sanguo/wuguo
-
创建一个带序号的临时节点:
/sanguo/wuguo
shellcreate -e -s /sanguo/wuguo
输出信息
propertiesCreated /sanguo/wuguo0000000003
-
查看节点
/sanguo
下的子节点shellls /sanguo
输出信息
properties[shuguo, weiguo, wuguo, wuguo0000000003]
-
退出,验证临时节点是否会消失
shellquit
-
重新连接
shell./zkCli.sh -server 192.168.145.132:2181
-
查看节点
/sanguo
下的子节点shellls /sanguo
输出信息,此时临时节点已自动删除
properties[shuguo, weiguo]
-
修改节点的值,修改
/sanguo/weiguo
的值,设置值为:simayi
shellset /sanguo/weiguo "simayi"
-
查看节点状态,查看
/sanguo
节点状态shellstat /sanguo
输出信息
propertiescZxid = 0x100000004 ctime = Sat Aug 24 17:25:32 CST 2024 mZxid = 0x100000004 mtime = Sat Aug 24 17:25:32 CST 2024 pZxid = 0x100000011 cversion = 10 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 2
-
创建一个永久节点:
/sanguo/jin
,节点信息:simayi
shellcreate /sanguo/jin "simayi"
-
删除一个节点,删除
/sanguo/jin
节点,该节点下不能有子节点shelldelete /sanguo/jin
-
递归删除节点,删除
/sanguo
节点及子节点shelldeleteall /sanguo
监听器原理
zookeeper客户端去服务端注册,监听节点或节点数据的变化
1.首先要有一个main()线程
2.在main线程中创建zookeeper客户端,再创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)
3.通过connect线程将注册的监听事件发送给zookeeper
4.zookeeper将注册的监听事件添加到监听列表中
5.Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
6.listener线程内部调用process()方法
监听器命令行操作
-
创建一个永久节点:
/sanguo
,节点信息:diaochan
shellcreate /sanguo "diaochan"
监听节点值的变化
-
连接客户端1,设置监听,监听节点:
/sanguo
,监听节点值的变化shellget -w /sanguo
-
连接客户端2,改变
/sanguo
节点的节点值,同时观察客户端1shellset /sanguo "lvbu"
-
客户端1输出信息
propertiesWATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo
-
注意:注册一次,只能监听一次,想再次监听,需要再次注册
监听节点下子节点的变化(仅是直接的子节点)
-
连接客户端1,设置监听,监听节点:
/sanguo
,监听子节点的变化shellls -w /sanguo
-
连接客户端2,在
/sanguo
节点下新增子节点,同时观察客户端1shellcreate /sanguo/jin "simayi"
-
客户端1输出信息
propertiesWATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo
-
注意:注册一次,只能监听一次,想再次监听,需要再次注册
参考资料
- 尚硅谷