zookeeper节点类型

节点类型

持久节点(Persistent Nodes)

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

临时节点(Ephemeral Nodes)

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

持久顺序节点(PERSISTENT_SEQUENTIAL Nodes)

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

临时顺序节点(EPHEMERAL_SEQUENTIAL Nodes)

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

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

创建不同类型节点

使用cli.sh

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

shell 复制代码
#创建持久顺序节点
create -s /persistent_seq_node
#创建临时节点
create -e /ephemeral_node
#创建临时顺序节点
create -s -e /ephemeral_seq_node

顺序节点自动会加后缀

复制代码
[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

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

复制代码
[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

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

使用java创建不同类型节点

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

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

复制代码
zooKeeper.create(path,"123".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT)

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

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

复制代码
client.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath("/sequential_node_", data);

顺序节点的获取

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

如使用curator获取

复制代码
List<String> strings = client.getChildren().forPath("/test");
节点状态信息

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

java 复制代码
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;
  }

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

java 复制代码
Stat stat = zooKeeper.exists(path, false);
相关推荐
007php0071 天前
百度面试题解析:Zookeeper、ArrayList、生产者消费者模型及多线程(二)
java·分布式·zookeeper·云原生·职场和发展·eureka·java-zookeeper
坐吃山猪3 天前
zk02-知识演进
运维·zookeeper·debian
yumgpkpm3 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
小醉你真好4 天前
16、Docker Compose 安装Kafka(含Zookeeper)
docker·zookeeper·kafka
yumgpkpm5 天前
CMP (类ClouderaCDP7.3(404次编译) )华为鲲鹏Aarch64(ARM)信创环境多个mysql数据库汇聚的操作指南
大数据·hive·hadoop·zookeeper·big data·cloudera
yumgpkpm8 天前
大数据综合管理平台(CMP)(类Cloudera CDP7.3)有哪些核心功能?
hive·hadoop·elasticsearch·zookeeper·big data
回家路上绕了弯11 天前
深入 Zookeeper 数据模型:树形 ZNode 结构的设计与实践
后端·zookeeper
90919322111 天前
SQL关键词标签在数据分析中的应用与实践
zookeeper
小马爱打代码11 天前
zookeeper:一致性原理和算法
分布式·zookeeper·云原生
小马爱打代码12 天前
zookeeper:架构原理和使用场景
分布式·zookeeper·架构