zookeeper客户端命令行操作、节点类型及监听器

zookeeper客户端命令行操作、节点类型及监听器

文档

  1. linux安装java -centos安装java -linux配置java环境变量
  2. zookeeper单机安装
  3. zookeeper集群安装
  4. zookeeper客户端命令行操作、节点类型及监听器
  5. zookeeper集群写数据原理
  6. java操作zookeeper

启动zookeeper客户端

  1. 启动客户端,默认服务器为localhost

    shell 复制代码
    ./zkCli.sh

    输出信息:[zk: localhost:2181(CONNECTED) 0]

  2. 启动客户端,指定服务器

    shell 复制代码
    ./zkCli.sh -server 192.168.145.132:2181

    输出信息:[zk: 192.168.145.132:2181(CONNECTED) 0]

  3. 退出

    shell 复制代码
    quit

节点类型

properties 复制代码
持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除
持久有序号节点
持久无序号节点

短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自动删除
临时有序号节点
临时无序号节点

有序号节点
节点名称后拼接顺序编号
创建有序号节点命令(节点名称相同)可重复执行,节点名称后拼接的顺序编号增大
重复执行实际是创建不同的节点,前缀相同,后面的顺序编号不同

创建有序号节点时,节点名称后会拼接顺序编号,顺序号是一个单调递增的计数器,由父节点维护

发现:自增的序号与父节点下子节点的数量有关,并且无论子节点是否有序号

使用场景:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

客户端命令行操作命令示例

  1. 查看/节点下的子节点

    shell 复制代码
    ls /

    输出信息

    properties 复制代码
    [zookeeper]
  2. 查看/节点下的子节点,及当前节点的详细信息

    shell 复制代码
    ls -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
  3. 创建一个永久节点:/sanguo,节点信息:diaochan

    shell 复制代码
    create /sanguo "diaochan"
  4. 创建一个永久节点:/sanguo/shuguo,节点信息:liubei

    shell 复制代码
    create /sanguo/shuguo "liubei"

    输出信息

    properties 复制代码
    Created /sanguo/shuguo
  5. 查看/sanguo节点信息

    shell 复制代码
    get /sanguo

    输出信息

    properties 复制代码
    diaochan
  6. 查看/sanguo节点详细信息

    shell 复制代码
    get -s /sanguo

    输出信息

    properties 复制代码
    diaochan
    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
  7. 创建一个永久节点:/sanguo/weiguo,节点信息:caocao

    shell 复制代码
    create /sanguo/weiguo "caocao"
  8. 创建一个带序号的永久节点:/sanguo/weiguo/zhangliao

    shell 复制代码
    create -s /sanguo/weiguo/zhangliao "zhangliao"

    输出信息

    properties 复制代码
    Created /sanguo/weiguo/zhangliao0000000000
  9. 带序号的节点可重复创建,创建相同的节点:/sanguo/weiguo/zhangliao

    shell 复制代码
    create -s /sanguo/weiguo/zhangliao "zhangliao"

    输出信息

    properties 复制代码
    Created /sanguo/weiguo/zhangliao0000000001
  10. 创建一个临时节点:/sanguo/wuguo,节点信息:zhouyu

    shell 复制代码
    create -e /sanguo/wuguo "zhouyu"

    输出信息

    properties 复制代码
    Created /sanguo/wuguo
  11. 创建一个带序号的临时节点:/sanguo/wuguo

    shell 复制代码
    create -e -s /sanguo/wuguo

    输出信息

    properties 复制代码
    Created /sanguo/wuguo0000000003
  12. 查看节点/sanguo下的子节点

    shell 复制代码
    ls /sanguo

    输出信息

    properties 复制代码
    [shuguo, weiguo, wuguo, wuguo0000000003]
  13. 退出,验证临时节点是否会消失

    shell 复制代码
    quit
  14. 重新连接

    shell 复制代码
    ./zkCli.sh -server 192.168.145.132:2181
  15. 查看节点/sanguo下的子节点

    shell 复制代码
    ls /sanguo

    输出信息,此时临时节点已自动删除

    properties 复制代码
    [shuguo, weiguo]
  16. 修改节点的值,修改/sanguo/weiguo的值,设置值为:simayi

    shell 复制代码
    set /sanguo/weiguo "simayi"
  17. 查看节点状态,查看/sanguo节点状态

    shell 复制代码
    stat /sanguo

    输出信息

    properties 复制代码
    cZxid = 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
  18. 创建一个永久节点:/sanguo/jin,节点信息:simayi

    shell 复制代码
    create /sanguo/jin "simayi"
  19. 删除一个节点,删除/sanguo/jin节点,该节点下不能有子节点

    shell 复制代码
    delete /sanguo/jin
  20. 递归删除节点,删除/sanguo节点及子节点

    shell 复制代码
    deleteall /sanguo

监听器原理

复制代码
zookeeper客户端去服务端注册,监听节点或节点数据的变化

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

监听器命令行操作

  1. 创建一个永久节点:/sanguo,节点信息:diaochan

    shell 复制代码
    create /sanguo "diaochan"
监听节点值的变化
  1. 连接客户端1,设置监听,监听节点:/sanguo,监听节点值的变化

    shell 复制代码
    get -w /sanguo
  2. 连接客户端2,改变/sanguo节点的节点值,同时观察客户端1

    shell 复制代码
    set /sanguo "lvbu"
  3. 客户端1输出信息

    properties 复制代码
    WATCHER::
    
    WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo
  4. 注意:注册一次,只能监听一次,想再次监听,需要再次注册

监听节点下子节点的变化(仅是直接的子节点)
  1. 连接客户端1,设置监听,监听节点:/sanguo,监听子节点的变化

    shell 复制代码
    ls -w /sanguo
  2. 连接客户端2,在/sanguo节点下新增子节点,同时观察客户端1

    shell 复制代码
    create /sanguo/jin "simayi"
  3. 客户端1输出信息

    properties 复制代码
    WATCHER::
    
    WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo
  4. 注意:注册一次,只能监听一次,想再次监听,需要再次注册

参考资料

  • 尚硅谷
相关推荐
好吃的肘子3 小时前
Zookeeper 入门(二)
linux·分布式·zookeeper
onkel in blog6 小时前
【Docker】Docker Compose方式搭建分布式协调服务(Zookeeper)集群
分布式·docker·zookeeper
dddaidai1233 天前
分布式ID和分布式锁
redis·分布式·mysql·zookeeper·etcd
code在飞6 天前
windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper
windows·分布式·zookeeper·kafka
不会飞的鲨鱼6 天前
Windows系统下使用Kafka和Zookeeper,Python运行kafka(二)
windows·zookeeper·kafka
搞不懂语言的程序员7 天前
Kafka Controller的作用是什么?故障时如何恢复? (管理分区和副本状态;通过ZooKeeper选举新Controller)
分布式·zookeeper·kafka
giser@20117 天前
Zookeeper单机版安装部署
分布式·zookeeper·安装教程·单机部署
giser@20119 天前
ZooKeeper工作机制与应用场景
分布式·zookeeper·云原生
搞不懂语言的程序员9 天前
Kafka的核心组件有哪些?简要说明其作用。 (Producer、Consumer、Broker、Topic、Partition、ZooKeeper)
分布式·zookeeper·kafka
程序员buddha10 天前
SpringBoot+Dubbo+Zookeeper实现分布式系统步骤
分布式·zookeeper·dubbo·springboot