ZooKeeper 数据模型
数据存储形式
-
ZooKeeper 中对用户的数据采用 Key-Value 形式存储
-
ZooKeeper 的 key 是以目录树路径的形式表示(根目录 /)
-
ZooKeeper 的 key 之间存在父子关系
-
ZooKeeper 中的 Key-Value 称为目录树的 znode 节点
znode 状态
名称 | 描述 |
---|---|
cZxid | 创建 znode 节点时的事务ID |
ctime | 创建 znode 节点的时间 |
mZxid | 最后修改 znode 节点时的事务ID |
mtime | 最后修改 znode 节点的时间 |
pZxid | 创建最新子节点 |
cversion | 子节点版本号,子节点每次修改版本号加1 |
dataversion | 数据版本号,数据每次修改该版本号加1 |
aclversion | 权限版本号,权限每次修改该版本号加1 |
ephemeralOwner | 如果是 0 表示永久节点;如果是会话 id,表示是临时节点 |
dataLength | znode 节点的数据长度 |
numChildren | znode 节点拥有子节点的数量(只统计直接子节点的数量) |
ZooKeeper 中的 znode 有多种类型:
-
PERSISTENT(持久不带序号 参数:默认):创建者就算跟集群断开联系,该类节点也会持久存在与zk集群中
-
EPHEMERAL (短暂不带序号 参数:-e):创建者一旦跟集群断开联系,zk就会将这个节点删除
-
SEQUENTIAL (带序号 参数:-s):这类节点,zk会自动拼接上一个序号,而且序号是递增的
组合类型:
-
PERSISTENT :持久不带序号(默认)
-
EPHEMERAL :短暂不带序号 (参数:-e)
-
PERSISTENT 且 SEQUENTIAL :持久且带序号(参数 :-s)
-
EPHEMERAL 且 SEQUENTIAL :短暂且带序号(参数:-e -s)
# 创建持久化节点(默认)
[zk: localhost:2181(CONNECTED) 1] create /aa "aa"
# 创建临时节点(客户端连接断开节点自动删除)
[zk: localhost:2181(CONNECTED) 1] create -e /bb "bb"
# 创建带序号节点(自动给节点添加序号,避免节点重复)
[zk: localhost:2181(CONNECTED) 1] create -s /cc "cc"
Created /cc0000000006
# 创建临时且带序号节点
[zk: localhost:2181(CONNECTED) 1] create -e -s /cc "cc"
ZooKeeper 数据一致性的保证
-
顺序一致性( Sequential Consistency )
来自客户端的写请求将按照发送的顺序应用
-
原子性( Atomicity )
更新成功或失败,没有部分结果
-
单一视图( Single System Image )
客户机将看到服务的相同视图,而与它连接到的服务器无关。 意思就是说:客户端无论连接哪一个服务器,得到的数据都是一样
-
可靠性( Reliability )
一旦应用了更新,它将从那时起一直存在,直到客户端覆盖该更新。
-
最终一致性( Timeliness )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现