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. 注意:注册一次,只能监听一次,想再次监听,需要再次注册

参考资料

  • 尚硅谷
相关推荐
星辰@Sea几秒前
ZooKeeper远程连接超时排查与解决
linux·分布式·zookeeper
Lill_bin1 小时前
ElasticSearch底层原理解析
大数据·分布式·elasticsearch·搜索引擎·zookeeper·云原生·jenkins
编程经验分享15 小时前
Windows 安装 ZooKeeper 以及 IDEA 安装 zoolytic 连接工具
分布式·zookeeper·云原生
ps酷教程1 天前
Zookeeper学习
分布式·学习·zookeeper
程序员-杨胡广3 天前
掌握ZooKeeper的二阶段提交及其优缺点
linux·运维·服务器·zookeeper
bug菌¹3 天前
滚雪球学SpringCloud[2.2]:Consul与Zookeeper服务注册
spring cloud·zookeeper·consul
一瓢一瓢的饮 alanchan3 天前
【运维监控】Prometheus+grafana监控zookeeper运行情况
linux·运维·zookeeper·运维开发·grafana·prometheus·运维监控
无休居士4 天前
你天天用微服务还不知道心跳检测机制是什么?
微服务·zookeeper·云原生·eureka·架构·etcd·consul
云卷云舒处5 天前
docker-compose实现zookeeper及kafka集群
docker·zookeeper·kafka
爪哇天下5 天前
ZooKeeper相关原理
网络·分布式·zookeeper