Zookeeper ZNode 数据结构原理

server/2024/10/18 14:20:38/

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.ppmy.cn/server/49768.html

相关文章

Spring Cloud Bus——概述与基本配置

在微服务架构中,多个服务之间的配置管理和事件通知是一个重要的需求。Spring Cloud Bus 提供了一个轻量级的消息总线,用于在分布式系统中传播配置变化和事件通知。它能够与 Spring Cloud Config 一起工作,实现配置的实时刷新。在这篇文章中&a…

React@16.x(25)useReducer

目录 1,介绍1.1,Flux 的设计思想 2,实现2.1,引入2.2,实现 useReducer 3,官方实现 1,介绍 这也是官方的一个HOOK,目的是更方便的使用 Redux。 Redux 后续会详细介绍。它的主体思想沿…

金鸣识别系统:PDF转Excel的高效利器

在日常办公中,我们经常需要将PDF文档转换为Excel表格以便进行数据分析。然而,当有些PDF转换过程可能会变得复杂,因为许多转换工具无法完美处理图片元素,导致转换后的准确率不高或排版错乱。幸运的是,金鸣识别系统以其卓…

计算机跨考现状,两极分化现象很严重

其实我觉得跨考计算机对于一些本科学过高数的同学来说有天然的优势 只要高数能学会,那计算机那几本专业课,也能很轻松的拿下,而对于本科是文科类的专业,如果想跨考计算机,难度就不是一般的大了。 现在跨考计算机呈现…

一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相

案发现场:混沌初现 2024年6月10日,本应是平静的一天。但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响。北京可用区服务器节点突然出现大量 “not ready” 告警,紧接着,系统自动触发 004 节点重启&…

简单的心电图信号分割方法

代码很简单,很容易看懂。 import pandas as pdimport matplotlib.pyplot as plt #headers [Name, Age, Marks]df pd.read_csv(samples-folder/samples2.csv) dfdf.drop(0)dfdf.drop(1)# print(df) if(len(df.columns) 3): df.columns [sample interval, sig…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer,官方提供了一些教程,本人希望能够断点调试,以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…

几内亚ECTN是什么?怎么办理?建议收藏!

几内亚ECTN是什么?怎么办理?建议收藏! 一、去往几内亚的货物,从六月一日开始强制实施ECTN制度,取消原来并行的ENS制度。如若货物到港前没申请ECTN,几内亚海关将会强行扣货。 ECTN是英文:ELECTR…