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

参考资料

  • 尚硅谷
相关推荐
上辈子杀猪这辈子学IT1 小时前
【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作
linux·hadoop·zookeeper·centos·debian
Mephisto.java1 天前
【大数据学习 | kafka高级部分】文件清除原理
大数据·hadoop·zookeeper·spark·kafka·hbase·flume
大数据魔法师1 天前
Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署
hadoop·分布式·zookeeper
Francek Chen2 天前
【大数据技术基础 | 实验八】HBase实验:新建HBase表
大数据·数据库·hadoop·分布式·zookeeper·hbase
一叶飘零_sweeeet2 天前
Eureka与 Zookeeper 在服务注册与发现中的差异解析
zookeeper·eureka·注册中心
Mephisto.java3 天前
【大数据学习 | kafka】简述kafka的消费者consumer
mysql·zookeeper·kafka·flume·storm
unique_pursuit3 天前
Zookeeper启动报错:Starting zookeeper ... FAILED TO START 解决方案
分布式·zookeeper·debian
昨天今天明天好多天6 天前
【Apache Zookeeper】
分布式·zookeeper·apache
珍珠是蚌的眼泪7 天前
Zookeeper
分布式·zookeeper·分布式锁·持久化节点·临时节点