ZooKeeper 数据模型

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 节点拥有子节点的数量(只统计直接子节点的数量)

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 )

    系统的客户端视图保证在一定的时间范围内是最新的。

posted @   追こするれい的人  阅读(52)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示