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 )