• zookeeper节点类型


    节点类型

    持久节点(Persistent Nodes)

    这些是Zookeeper中最常见的一种节点类型,当创建一个持久类型节点时,该值会一直存在zookeeper中,直到被显式删除或被新值覆盖。

    临时节点(Ephemeral Nodes)

    这些节点只在创建它们的会话有效期内存在。如果会话过期或断开连接,节点会自动删除。临时节点通常用于表示分布式系统中的客户端或工作节点,例如队列或锁。

    持久顺序节点(PERSISTENT_SEQUENTIAL Nodes)

    顺序节点与持久节点类似,但其名称后面附加了一个序号,使得节点名称唯一。当创建顺序节点时,Zookeeper会给其名称添加一个单调递增的计数器

    临时顺序节点(EPHEMERAL_SEQUENTIAL Nodes)

    同持久顺序节点特性,只不过会话内有效。会话关闭会自动消失。

    3.6之后的版本还增加了ttl节点和Container节点。

    创建不同类型节点

    使用cli.sh

    create命令默认创建的时持久节点

    #创建持久顺序节点
    create -s /persistent_seq_node
    #创建临时节点
    create -e /ephemeral_node
    #创建临时顺序节点
    create -s -e /ephemeral_seq_node
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    顺序节点自动会加后缀

    [zk: localhost:2181(CONNECTED) 14] create -s /persistent_seq_node
    Created /persistent_seq_node0000000001
    [zk: localhost:2181(CONNECTED) 15] create -s /persistent_seq_node
    Created /persistent_seq_node0000000002
    
    • 1
    • 2
    • 3
    • 4

    临时顺序节点也会自动加后置

    [zk: localhost:2181(CONNECTED) 24] create -s -e /ephemeral_seq_node
    Created /ephemeral_seq_node0000000004
    [zk: localhost:2181(CONNECTED) 25] create -s -e /ephemeral_seq_node
    Created /ephemeral_seq_node0000000005
    
    • 1
    • 2
    • 3
    • 4

    临时节点会话关闭后会自动消失。这个端口zkCli.sh从写开启一个连接测试下即可。

    使用java创建不同类型节点

    zookeeper的api将抽象出一个CreateMode枚举对象来表示不同的节点类型。

    使用原生api。最后一个参数指定类型

    zooKeeper.create(path,"123".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT)
    
    • 1

    zkclient使用不同的create重载方法来创建

    在这里插入图片描述

    Curator在创建时候使用withMode来指定节点类型

    client.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath("/sequential_node_", data);
    
    • 1

    顺序节点的获取

    一般顺序节点都会有一层父节点,然后通过调用父节点的所有子节点来获取所有的顺序节点。

    如使用curator获取

    List strings = client.getChildren().forPath("/test");
    
    • 1
    节点状态信息

    节点的状态信息被封装在Stat对象中。Stat有以下属性

    public class Stat implements Record {
     //节点的创建事务的zxid(ZooKeeper Transaction Id),即创建时事务的ID
        private long czxid;
      //节点最后一次修改事务的zxid,即最后一次更新或者删除发生时的事务ID
        private long mzxid;
      //创建时间
        private long ctime;
      //上次修改时间
        private long mtime;
       //版本号,数据被修改次数
        private int version;
      //节点子节点的版本号,即子节点被修改的次数
        private int cversion;
      //节点ACL(访问控制列表)的版本号,即ACL被修改的次数
        private int aversion;
      //如果当前节点是临时节点,则ephemeralOwner表示当前节点的拥有者会话ID;否则,值为0
        private long ephemeralOwner;
        //数据长度
        private int dataLength;
        //子节点数
        private int numChildren;
      //子节点上次修改事务ID
        private long pzxid;
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    可以通过exists方法来获取stat对象

    Stat stat = zooKeeper.exists(path, false);
    
    • 1
  • 相关阅读:
    代码随想录--栈与队列-用队列实现栈
    [附源码]java毕业设计校园摄影爱好者交流网站
    MySQL练习题
    光伏、储能双层优化配置接入配电网研究(附带Matlab代码)
    Linux-软中断概述
    linux的美化工具 oh-my-zsh的安装与使用 神器工具
    代码随想录算法训练营第23期day4| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
    解决:Android Studio 中sdk tools 中库显示不全的问题
    备战 清华大学 上机编程考试-冲刺前50%,倒数第5天
    点云滤波--一种点云异常值检测和稳健法线估计方法
  • 原文地址:https://blog.csdn.net/sinat_16493273/article/details/134198208