前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Zookeeper-数据结构(Znode)

Zookeeper-数据结构(Znode)

作者头像
运维小路
发布于 2025-05-10 01:47:11
发布于 2025-05-10 01:47:11
12400
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

前面我们介绍介绍了几个常用的代理服务器,本章节我们讲来讲解Zookeeper这个中间件

我们前面完成了Zookeeper的安装,实际上的Zookeeper的使用对象或者使用方,是各个应用程序。我们一般情况下不会直接操作Zookeeper的读写,但是我们还是对Zookeeper里面的数据存储到哪里以及是如何存储还是需要有一定的理解。

1. 什么是 Znode

Znode 是 ZooKeeper 数据模型中的基本数据节点,类似于文件系统中的文件或目录。它以树形结构存储数据,并可以包含子节点。每个 Znode 都有一个唯一的路径,用于标识其在 ZooKeeper 树中的位置,例如 /root/child1。Zookeeper的存储结构是下面这样的树形结构

这里的/app1和/app1/p_1并没有从属关系。他们的本质是一样的,都是一个普通的Znode节点。

Znode 存储的数据包括:

数据内容:比如配置信息、状态信息等,他并不适合存储大量的的数据,也不适合存储频繁写的数据。

元数据:如版本号、时间戳、访问权限(ACL)等。


2. Znode 的分类

ZooKeeper 中的 Znode 主要分为以下几类,每种类型具有不同的生命周期和用途:

(1)持久节点(Persistent Znode)

特点:一旦创建,将一直存在于 ZooKeeper 中,直到被显式删除。

用途:通常用于存储长期需要保存的数据,如配置信息、服务注册信息等。

示例:/config 节点用于存储系统配置。

(2)临时节点(Ephemeral Znode)

特点:与客户端会话绑定,当客户端会话断开时,该节点会被自动删除。

用途:常用于实现分布式锁、临时状态监控等场景。

示例:/lock 节点用于实现分布式锁。

(3)持久顺序节点(Persistent Sequential Znode)

特点:具有持久性,并且在创建时会自动附加一个唯一的序列号。

用途:常用于实现分布式系统的唯一标识或顺序控制。

示例:/task-0000000001 节点用于任务队列。

(4)临时顺序节点(Ephemeral Sequential Znode)

特点:结合了临时节点和顺序节点的特性,会话断开后节点会被删除,且创建时附加序列号。

用途:适用于需要临时唯一标识的场景,如选主(Leader Election)过程。

示例:/election-0000000001 节点用于选主。


3. Znode 的特点

树形结构:Znode 以树状形式组织,每个节点可以有多个子节点。

数据与元数据:除了存储数据内容外,还包含版本号、时间戳等元数据。

权限控制(ACL):每个 Znode 可以设置访问控制列表(ACL),用于限制节点的读写权限。

监听机制(Watcher):客户端可以注册监听器,当 Znode 发生变化(如数据修改、子节点增加或删除)时,监听器会被触发。

4. Znode 的操作

我们日常查看操作是通过Zookeeper给我们的命令行工具进行操作,真实业务场景则是使用API操作。

链接Zookeeper

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost zookeeper]# ./bin/zkCli.sh
/usr/bin/java
Connecting to localhost:2181
#省略部分内容
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

列出Znode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#从/开始,也可以是具体路径(和Linux目录类似)
ls /
ls /zookeeper

创建Znode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#前面是znode,后面是znode的数据
create /myNode "Hello ZooKeeper"   #持久节点
create -e /myTempNode "Temporary Data" #临时节点
create -s /mySeqNode "Sequential Data" #顺序节点

更新Znode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set /myNode "New Data"

删除Znode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete /myNode
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验