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

ZooKeeper 数据模型

ZooKeeper 数据模型

ZooKeeper 拥有层次化的命名空间,类似分布式文件系统,但每个节点不仅能有子节点,还可关联数据。节点路径为规范的绝对路径,用斜杠分隔,无相对引用。路径命名有如下约束:

  • 路径名不能包含空字符 \u0000
  • 不能使用显示不佳或易混淆的字符,如 \u0001 - \u001F\u007F\u009F
  • 禁止使用 \ud800 - \uF8FF\uFFF0 - \uFFFF 这些字符。
  • 虽然 . 可作为其他名称的一部分,但 ... 不能单独用于表示路径中的节点,因为 ZooKeeper 不使用相对路径。
  • 保留关键字 zookeeper 不可用。

1. ZNodes(ZooKeeper 节点)

  • 状态结构(Stat Structure):每个 ZNode 维护一个状态结构,包含数据变更、ACL 变更的版本号以及时间戳。版本号和时间戳用于验证缓存和协调更新。每次 ZNode 数据变更,版本号都会增加。客户端更新或删除数据时需提供版本号,若版本号不匹配,操作将失败(该行为可被覆盖)。
  • 节点角色定义:在 ZooKeeper 文档中,ZNode 指数据节点;服务器指构成 ZooKeeper 服务的机器;法定节点指构成集群的服务器;客户端指使用 ZooKeeper 服务的主机或进程。

2. Watches(监听机制)

客户端可对 ZNode 设置监听,ZNode 发生变化时触发监听并清除。监听触发后,ZooKeeper 会向客户端发送通知。

3. 数据访问

  • 原子性:命名空间中每个 ZNode 存储的数据读写是原子操作,读操作获取所有关联数据字节,写操作替换所有数据。
  • 访问控制:每个节点有访问控制列表(ACL),用于限制访问权限。
  • 数据规模:ZooKeeper 并非通用数据库或大对象存储,主要管理协调数据,数据通常较小(以千字节为单位)。客户端和服务器实现会检查确保 ZNode 数据小于 1M,实际数据应更小。处理大数据会增加操作时间和影响延迟,若需存储大数据,可将其存于 NFS 或 HDFS 等大容量存储系统,在 ZooKeeper 中存储指向这些存储位置的指针。

4. 特殊类型的 ZNodes

  • 临时节点(Ephemeral Nodes):只要创建该 ZNode 的会话处于活动状态,临时节点就存在。会话结束,ZNode 会被删除,且临时节点不允许有子节点。可使用 getEphemerals() API 获取会话创建的临时节点列表,常用于服务发现场景。
  • 顺序节点(Sequence Nodes):创建 ZNode 时,可要求 ZooKeeper 在路径末尾添加单调递增的计数器,该计数器对父节点唯一,格式为 %010d(10 位数字,前补 0)。计数器是父节点维护的有符号整数(4 字节),超过 2147483647 会溢出。
  • 容器节点(Container Nodes,3.6.0 版本引入):用于特定场景,如领导者选举、锁机制等。当容器的最后一个子节点被删除,容器节点未来某个时刻可能被服务器删除。创建容器节点的子节点时,要处理 KeeperException.NoNodeException 异常,若发生该异常需重新创建容器节点。
  • TTL 节点(TTL Nodes,3.6.0 版本引入):创建持久或持久顺序 ZNode 时,可选择设置以毫秒为单位的 TTL。若 ZNode 在 TTL 内未被修改且无子节点,未来某个时刻可能被服务器删除。默认情况下 TTL 节点功能禁用,需通过系统属性启用,否则创建时会抛出 KeeperException.UnimplementedException 异常。

5. ZooKeeper 中的时间跟踪

  • Zxid(ZooKeeper 事务 ID):ZooKeeper 状态的每次变更都会获得一个 Zxid 标记,体现所有变更的全局顺序。每个变更有唯一 Zxid,若 zxid1 < zxid2,则 zxid1 变更先于 zxid2 变更发生。
  • 版本号:节点的每次变更会使节点的某个版本号增加,包括数据版本号(version)、子节点版本号(cversion)和 ACL 版本号(aversion)。
  • Ticks:多服务器模式下,服务器用 Ticks 定义事件时间,如状态上传、会话超时、节点间连接超时等。Tick 时间通过最小会话超时(2 倍 Tick 时间)间接暴露,若客户端请求的会话超时小于最小会话超时,服务器会将实际会话超时设为最小会话超时。
  • 实时时间:ZooKeeper 仅在 ZNode 创建和修改时在状态结构中记录时间戳,不使用实时时间。

6. ZooKeeper 状态结构(Stat Structure)

每个 ZNode 的状态结构包含以下字段:

  • czxid:创建该 ZNode 的变更的 Zxid。
  • mzxid:最后修改该 ZNode 的变更的 Zxid。
  • pzxid:最后修改该 ZNode 子节点的变更的 Zxid。
  • ctime:该 ZNode 创建的时间(从纪元开始的毫秒数)。
  • mtime:该 ZNode 最后修改的时间(从纪元开始的毫秒数)。
  • version:该 ZNode 数据的变更次数。
  • cversion:该 ZNode 子节点的变更次数。
  • aversion:该 ZNode ACL 的变更次数。
  • ephemeralOwner:若该 ZNode 是临时节点,为其所有者会话 ID;否则为 0。
  • dataLength:该 ZNode 数据字段的长度。
  • numChildren:该 ZNode 的子节点数量。

相关文章:

ZooKeeper 数据模型

ZooKeeper 数据模型 ZooKeeper 拥有层次化的命名空间&#xff0c;类似分布式文件系统&#xff0c;但每个节点不仅能有子节点&#xff0c;还可关联数据。节点路径为规范的绝对路径&#xff0c;用斜杠分隔&#xff0c;无相对引用。路径命名有如下约束&#xff1a; 路径名不能包…...

【VUE】Vue2中Vue.extend方法

在 Vue.js 2.x 版本中&#xff0c;Vue.extend() 方法被用于创建一个新的 Vue 子类&#xff0c;可以在该子类上扩展一些属性、指令和组件选项等&#xff0c;然后进行实例化。 比如&#xff0c;可以在创建一些类似 loading 式的函数式插件时&#xff0c;使用&#xff1a; 在 Vue…...

MaskGAE论文阅读

What’s Behind the Mask: Understanding Masked Graph Modeling for Graph Autoencoders 碎碎念&#xff1a;一篇论文看四天&#xff0c;效率也没谁了(捂脸) 看一点忘一点&#xff0c;虽然在本子上有记录&#xff0c;但还是忘&#xff0c;下次看一点在博客上记一点启发 本来很…...

Mybatis-plus 更新 Null 的策略踩坑记

一个bug 在一个管理页面&#xff0c;有一个非必填字段被设置成空了并提交更新&#xff0c;再次打开的时候&#xff0c;发现字段还在&#xff0c;并没有被更新成功。 使用的数据库映射框架是 Mybatis-plus &#xff0c;对于Mybatis 在更新字段的时候会对空进行校验&#xff0c;…...

Oracle迁移DM数据库

Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS&#xff0c;将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具&#xff0c;点击新建工程&#xff0c;填写好工程信息&#xff0c;如图&#xff1a; 2.2 新建迁…...

HTML特殊符号的使用示例

目录 一、基本特殊符号的使用 1、空格符号&#xff1a; 2、小于号 和 大于号&#xff1a; 3、引号&#xff1a; 二、版权、注册商标符号的使用 1、版权符号&#xff1a;© 2、注册商标符号&#xff1a; 三、数学符号的使用 四、箭头符号的使用 五、货币符号的使用…...

数据结构基础之《(15)—排序算法小结》

一、排序算法的稳定性 1、稳定性是指同样大小的样本再排序之后不会改变相对次序 2、对基础类型来说&#xff0c;稳定性毫无意义 比如&#xff1a;3和3没有区别。《潜伏》里说同样两个一百元大钞&#xff0c;你能告诉我哪一个是高尚的那一个是龌龊的么 3、对非基础类型来说&a…...

Linux系统下速通stm32的clion开发环境配置

陆陆续续搞这个已经很久了。 因为自己新电脑是linux系统无法使用keil&#xff0c;一开始想使用vscode里的eide但感觉不太好用&#xff1b;后面想直接使用cudeide但又不想妥协&#xff0c;想趁着这个机会把linux上的其他单片机开发配置也搞明白&#xff1b;而且非常想搞懂cmake…...

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅&#xff1a;从C语言到人工智能&#xff0c;个人成长与突破的全景回顾 引言 回望2024年&#xff0c;我不仅收获了技术上的成长&#xff0c;更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上&#xff0c;CSDN不仅是我展示技术成…...

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描&#xff0c;快速检测&#xff1a;高效IP网段扫描工具全解析 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着…...

go入门Windows环境搭建

简介 Go 即 Golang&#xff0c;是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述&#xff0c;近 10 多年&#xff0c;从单机时代的 C 语言到现在互联网时代的 Java&#xff0c;都没有令人满意的开发语言&#xff0c;而 C往往给人的感觉是&a…...

安装Ubuntu22.04

1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大...

对比OpenAI的AI智能体Operator和智谱的GLM-PC,它们有哪些不同?

OpenAI 的 AI 智能体 Operator 和智谱的 GLM-PC 有以下不同&#xff1a; 功能侧重 Operator&#xff1a;主要侧重于网页操作&#xff0c;能在网页上模拟人类进行点击、输入等操作&#xff0c;完成如预订旅行住宿、餐厅预约、在线购物、在 Arxiv 上进行论文分类搜索等任务123。…...

Git Bash 配置 zsh

博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入&#xff1a; if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …...

美格智能AIMO智能体+DeepSeek-R1模型,AI应用的iPhone时刻来了

导语&#xff1a; 当AI大模型从云端下沉至终端设备&#xff0c;一场关于效率、隐私与智能化的革命悄然展开。作为全球领先的无线通信模组及解决方案提供商&#xff0c;美格智能凭借其高算力AI模组矩阵与端侧大模型部署经验&#xff0c;结合最新发布的AIMO智能体产品&#xff0…...

Python标准库 - os (1) 环境变量、进程的用户和组

文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…...

QT 通过ODBC连接数据库的好方法:

效果图&#xff1a; PWD使用自己的&#xff0c;我的这是自己的&#xff0c;所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称&#xff08;DSN&am…...

机器学习 - 初学者需要弄懂的一些线性代数的概念

一、单位矩阵 在数学中&#xff0c;单位矩阵是一个方阵&#xff0c;其主对角线上的元素全为1&#xff0c;其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用&#xff0c;即任何矩阵与单位矩阵相乘&#xff0c;结果仍为原矩阵本身。 单位矩阵的定义&…...

WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

简介 在这个系列的上一篇文章中&#xff0c;我们介绍了ESP32 I2S音频总线的相关知识&#xff0c;简要了解了什么是I2S总线、它的通信格式&#xff0c;以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾&#xff1a; ESP32 I2S音频总线学习笔记&#xff08;一&a…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...