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);
相关推荐
what丶k19 小时前
ZooKeeper从入门到精通:分布式协调的核心技术解析
zookeeper
yumgpkpm20 小时前
在AI语言大模型时代 Cloudera CDP(华为CMP 鲲鹏版)对自有知识的保护
人工智能·hadoop·华为·zookeeper·spark·kafka
【赫兹威客】浩哥21 小时前
【赫兹威客】伪分布式ZooKeeper测试教程
大数据·分布式·zookeeper
帅次1 天前
系统分析师-微服务系统分析与设计
docker·微服务·zookeeper·容器·kubernetes·etcd·kubelet
【赫兹威客】浩哥2 天前
【赫兹威客】完全分布式ZooKeeper测试教程
分布式·zookeeper·云原生
2401_840192272 天前
ZooKeeper 集群部署指南(Kubernetes StatefulSet 方式)
分布式·zookeeper·kubernetes
2401_840192272 天前
ZooKeeper 单机部署指南
分布式·zookeeper·云原生
yumgpkpm2 天前
Cloudera CDP/CDH/Hadoop 信创大模型AI时代何去何从?
人工智能·hive·hadoop·elasticsearch·zookeeper·kafka·cloudera
weixin_462446232 天前
一键安装单节点 Zookeeper 3.8.5(附完整 Bash 脚本)
zookeeper·debian·bash
不做码农好多年,该何去何从。3 天前
zookeeper是什么可以做什么?
分布式·zookeeper·云原生