当前位置: 首页 > news >正文

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

顺序节点自动会加后缀

[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有以下属性

public class Stat implements Record {//节点的创建事务的zxid(ZooKeeper Transaction Id),即创建时事务的IDprivate long czxid;//节点最后一次修改事务的zxid,即最后一次更新或者删除发生时的事务IDprivate long mzxid;//创建时间private long ctime;//上次修改时间private long mtime;//版本号,数据被修改次数private int version;//节点子节点的版本号,即子节点被修改的次数private int cversion;//节点ACL(访问控制列表)的版本号,即ACL被修改的次数private int aversion;//如果当前节点是临时节点,则ephemeralOwner表示当前节点的拥有者会话ID;否则,值为0private long ephemeralOwner;//数据长度private int dataLength;//子节点数private int numChildren;//子节点上次修改事务IDprivate long pzxid;}

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

Stat stat = zooKeeper.exists(path, false);

相关文章:

  • 听GPT 讲Rust源代码--library/std(13)
  • 集线器、交换机、网桥、路由器、网关
  • 如何使用Python和Matplotlib创建双Y轴动态风格折线图 | 数据可视化教程
  • C++进阶语法——STL 标准模板库(下)(Standard Template Library)【学习笔记(七)】
  • 【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群
  • Vue3后台管理系统框架之时间格式化封装
  • Spring整合JUnit
  • 服务器搭建:从零开始创建自己的Spring Boot应用【含登录、注册功能】
  • 【wp】2023鹏城杯初赛 Web web1(反序列化漏洞)
  • onnx 模型加载部署运行方式
  • 词典查询工具django-mdict
  • Canoe UDS诊断技术
  • 壹[1],Opencv常用结构
  • 2023年软件系统架构师论文【回忆版】
  • Java数组的定义与常用使用方法
  • 【Leetcode】101. 对称二叉树
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • avalon2.2的VM生成过程
  • Docker: 容器互访的三种方式
  • If…else
  • Java 内存分配及垃圾回收机制初探
  • LeetCode算法系列_0891_子序列宽度之和
  • MQ框架的比较
  • Redis 懒删除(lazy free)简史
  • webpack入门学习手记(二)
  • 从零开始的无人驾驶 1
  • 翻译--Thinking in React
  • 关于Java中分层中遇到的一些问题
  • 基于HAProxy的高性能缓存服务器nuster
  • 解析带emoji和链接的聊天系统消息
  • 三栏布局总结
  • 我与Jetbrains的这些年
  • 用简单代码看卷积组块发展
  • 做一名精致的JavaScripter 01:JavaScript简介
  • k8s使用glusterfs实现动态持久化存储
  • 带你开发类似Pokemon Go的AR游戏
  • #QT项目实战(天气预报)
  • (+4)2.2UML建模图
  • (rabbitmq的高级特性)消息可靠性
  • (二)WCF的Binding模型
  • (九)c52学习之旅-定时器
  • (一)Linux+Windows下安装ffmpeg
  • (转)Oracle存储过程编写经验和优化措施
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net 8 发布了,试下微软最近强推的MAUI
  • .Net CF下精确的计时器
  • .NET Core 2.1路线图
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net专家(张羿专栏)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)