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

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

文档

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

启动zookeeper客户端

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

    ./zkCli.sh
    

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

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

    ./zkCli.sh -server 192.168.145.132:2181
    

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

  3. 退出

    quit
    

节点类型

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

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

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

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

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

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

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

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

    ls /
    

    输出信息

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

    ls -s /
    

    输出信息

    # 创建节点的事务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

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

    create /sanguo/shuguo "liubei"
    

    输出信息

    Created /sanguo/shuguo
    
  5. 查看/sanguo节点信息

    get /sanguo
    

    输出信息

    diaochan
    
  6. 查看/sanguo节点详细信息

    get -s /sanguo
    

    输出信息

    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

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

    create -s /sanguo/weiguo/zhangliao "zhangliao"
    

    输出信息

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

    create -s /sanguo/weiguo/zhangliao "zhangliao"
    

    输出信息

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

    create -e /sanguo/wuguo "zhouyu"
    

    输出信息

    Created /sanguo/wuguo
    
  11. 创建一个带序号的临时节点:/sanguo/wuguo

    create -e -s /sanguo/wuguo
    

    输出信息

    Created /sanguo/wuguo0000000003
    
  12. 查看节点/sanguo下的子节点

    ls /sanguo
    

    输出信息

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

    quit
    
  14. 重新连接

    ./zkCli.sh -server 192.168.145.132:2181
    
  15. 查看节点/sanguo下的子节点

    ls /sanguo
    

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

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

    set /sanguo/weiguo "simayi"
    
  17. 查看节点状态,查看/sanguo节点状态

    stat /sanguo
    

    输出信息

    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

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

    delete /sanguo/jin
    
  20. 递归删除节点,删除/sanguo节点及子节点

    deleteall /sanguo
    

监听器原理

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

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

监听器命令行操作

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

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

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

    set /sanguo "lvbu"
    
  3. 客户端1输出信息

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

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

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

    create /sanguo/jin "simayi"
    
  3. 客户端1输出信息

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

参考资料

  • 尚硅谷
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值