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

Zookeeper ZNode 数据结构原理

ZNode 学习指南

1. ZNode 基本概念
  • 什么是 ZNode:ZNode 是 Zookeeper 中的数据节点。它类似于文件系统中的文件和目录,ZNode 既可以保存数据又可以作为其他 ZNode 的父节点。
  • ZNode 的路径:每个 ZNode 在 Zookeeper 命名空间中都有一个唯一的路径,如 /app1/config
2. ZNode 类型
  • 持久节点 (Persistent ZNode):当创建持久节点时,即使客户端断开连接或会话结束,节点也会一直存在,直到被明确删除。
  • 临时节点 (Ephemeral ZNode):临时节点在创建客户端会话断开或会话过期时自动删除。
  • 顺序节点 (Sequential ZNode):当创建顺序节点时,Zookeeper 会在节点名称末尾附加一个递增的数字,确保节点名称的唯一性。
  • 持久顺序节点和临时顺序节点:持久顺序节点和临时顺序节点分别是持久节点和临时节点的顺序变体。
3. ZNode 的操作
  • 创建 ZNode:使用 create 命令可以创建 ZNode,可以指定节点类型(持久、临时、顺序)。
  • 读取 ZNode 数据:使用 get 命令可以读取 ZNode 的数据和状态。
  • 更新 ZNode 数据:使用 set 命令可以更新 ZNode 的数据。
  • 删除 ZNode:使用 delete 命令可以删除指定的 ZNode。
4. ZNode 版本控制
  • 数据版本:每个 ZNode 都有一个版本号,每次更新节点数据时,版本号递增。
  • 条件更新:可以使用版本号确保数据的一致性,只有在当前版本号与指定版本号匹配时,更新才会成功。
5. Watcher 机制
  • Watcher 简介:Watcher 是一种触发器,可以在 ZNode 的数据或状态变化时通知客户端。Watchers 是一次性的,一旦触发,必须重新设置。
  • 设置 Watcher:在读取或获取 ZNode 数据时,可以设置 Watcher。例如,使用 getData 命令时可以设置 Watcher。
  • Watcher 通知:当 ZNode 数据或状态发生变化时,Zookeeper 会向设置了 Watcher 的客户端发送通知。
6. ZNode 的 ACL(访问控制列表)
  • ACL 概述:ZNode 可以通过 ACL 进行访问控制,ACL 由一组权限组成,如读取、写入、创建、删除、管理。
  • 设置 ACL:在创建 ZNode 时可以设置 ACL,也可以通过 setACL 命令修改 ACL。
  • 检查 ACL:通过 getACL 命令可以查看 ZNode 的 ACL 配置。

示例操作

创建持久节点
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs.Ids;public class CreateZNode {private static ZooKeeper zk;private static ZookeeperConnection conn;public static void create(String path, byte[] data) throws Exception {zk.create(path, data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}public static void main(String[] args) throws Exception {String path = "/sampleZNode";byte[] data = "Sample Data".getBytes();conn = new ZookeeperConnection();zk = conn.connect("localhost");create(path, data);conn.close();}
}
获取 ZNode 数据
import org.apache.zookeeper.ZooKeeper;public class GetZNodeData {private static ZooKeeper zk;private static ZookeeperConnection conn;public static byte[] getData(String path) throws Exception {return zk.getData(path, false, null);}public static void main(String[] args) throws Exception {String path = "/sampleZNode";conn = new ZookeeperConnection();zk = conn.connect("localhost");byte[] data = getData(path);System.out.println(new String(data));conn.close();}
}
更新 ZNode 数据
import org.apache.zookeeper.ZooKeeper;public class UpdateZNodeData {private static ZooKeeper zk;private static 
http://www.lryc.cn/news/376493.html

相关文章:

  • Golang - 90天从新手到大师
  • MyBatis常用转义字符 大于、小于、大于等于、小于等
  • Python --- 如何修改Jupyter Notebook在本地保存文件的默认路径?
  • 大模型 舆情分析 数据构造 prompt提示词 经验分享 数据准备
  • 这些已经死去的软件,依旧无可替代
  • SYD88xx使代码在RAM内存中执行/运行
  • 基于支持向量机的垃圾邮件分类,使用SVM+flask+vue
  • 目标检测数据集 - 零售食品LOGO检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 47.PyCharm P版突然无法启动
  • 「动态规划」如何求粉刷房子的最少花费?
  • 代码随想录算法训练营DAY41|背包问题 二维 、背包问题 一维、416. 分割等和子集
  • gitlab2024最新版安装
  • 2022C语言二级真题
  • 智慧购房:链家网上海在售楼盘数据解析与模型构建
  • 二进制数转字符串
  • WINDOWS系统jdk和maven明明安装了cmd里却无法使用相关命令
  • 基于EasyAnimate模型的视频生成最佳实践
  • linux最大线程数限制及打开最大文件数
  • MyBatis系列七: 一级缓存,二级缓存,EnCache缓存
  • C++迈向精通:函数指针对象与函数对象
  • 类和对象知识点
  • 【FAS】《Survey on face anti-spoofing in face recognition》
  • 【Unity】RPG2D龙城纷争(一)搭建项目、导入框架、前期开发准备
  • 多目标跟踪中检测器和跟踪器如何协同工作的
  • kali系统几个开机启动项的区别
  • 【自撰写】【国际象棋入门】第5课 常见开局战术组合(一)
  • 高考志愿填报选专业,女孩就业率最好的专业有哪些?
  • yolov5模型训练早停模型变大
  • next是什么???
  • K8s的资源对象