07. Zookeeper 节点类型 & 节点信息
Zookeeper 节点类型 & 节点信息
·
zookeeper 从两个纬度将ZNode 节点划分为四种类型: 持久有序型, 持久无序型, 短暂有序型, 短暂无序型. 从持久化角度来看, 当客户端断开连接后, 持久型节点不会消失, 而短暂性节点会消失; 从有序性角度来看, 有序节点创建时, 会自动为节点名称添加序号, 而无序节点创建的节点名称就是指定的节点名称.
1. 节点类型
1.1 有序性验证
- 有序节点名称并非指定的名称, 而会被添加序号
- 序号生成规则: 为以十位数格式的父节点节点信息中dataLength中的值
# mynodes 节点下当前拥有两个节点
[zk: localhost:2181(CONNECTED) 4] ls /mynodes
[A, B]
# 创建有序节点C, 序号为当前父节点/mynodes节点信息中的dataLength 的值, 而非从1开始. 数字是一个十位数的格式
[zk: localhost:2181(CONNECTED) 5] create -s /mynodes/C ""
Created /mynodes/C0000000002
# 查看所有节点
[zk: localhost:2181(CONNECTED) 6] ls /mynodes
[A, B, C0000000002]
1.2 持久型验证
- 短暂型节点创建时, 需要使用使用 -e 选项
- 测试时, 需要断开客户端连接, 重新连接.
# 创建父节点/mynodes
[zk: localhost:2181(CONNECTED) 0] create /mynodes ""
Created /mynodes
# 创建两个持久性节点, 创建两个段暂性节点
[zk: localhost:2181(CONNECTED) 1] create /mynodes/p-node-1 ""
Created /mynodes/p-node-1
[zk: localhost:2181(CONNECTED) 2] create /mynodes/p-node-2 ""
Created /mynodes/p-node-2
[zk: localhost:2181(CONNECTED) 3] create -e /mynodes/e-node-1 ""
Created /mynodes/e-node-1
[zk: localhost:2181(CONNECTED) 4] create -e /mynodes/e-node-2 ""
Created /mynodes/e-node-2
# 查看当前节点列表
[zk: localhost:2181(CONNECTED) 5] ls /mynodes
[p-node-2, e-node-2, e-node-1, p-node-1]
# 端开客户端连接
[zk: localhost:2181(CONNECTED) 6] quit
断开客户端连接后, 查看节点信息, 只剩下了持久性节点.
$ ./zkCli.sh ls /mynodes
[p-node-2, p-node-1]
2. 节点信息
ZNode 除了存储用户设置的数据之外, 还存储着一些节点的信息, 如版本号, 修改时间等信息, 称之为节点信息.
字段 | 描述 |
---|---|
czxid | 节点被创建时的事务id |
ctime | 节点上次修改的事务id |
mzxid | 节点上次修改的事务id |
mtime | 节点上次修改的时间 |
dataversion | 节点被修改的版本号 |
datalengh | 节点存储的数据的长度, 单位字节 |
aclversion | 节点的ACL 被修改的版本号 |
ephemeralOwner | 临时节点的拥有者的sessionid, 持久性节点为0 |
numChildren | 子节点的数量 |
cversion | 子节点变化版本号, 新增/删除子节点时会自增 |
pzxid | 子节点点最近修改(新增/删除)的zxid |
2.1 创建节点
# 创建持久化节点
[zk: localhost:2181(CONNECTED) 2] create /mynodes "mynodes"
Created /mynodes
[zk: localhost:2181(CONNECTED) 3] get /mynodes
# 节点存储数据
mynodes
# 节点创建时事务id和时间, 一旦创建,则不再改变
cZxid = 0x1e4
ctime = Sun Feb 17 15:23:44 CST 2019
# 节点修改时事务id和时间, 修改节点数据内容时变更
mZxid = 0x1e4
mtime = Sun Feb 17 15:23:44 CST 2019
# 子节点数量变更事务id, 新增或删除子节点时影响.
pZxid = 0x1e4
# 子节点变化版本号, 新增或删除子节点时影响
cversion = 0
# 节点数据版本号, 修改节点数据内容时会变更, 初始化为0
dataVersion = 0
# 节点acl权限版本号, 初始化为0
aclVersion = 0
# 持久化节点为0x0, 非持久化节点为sessionid, 如: 0x100092d5d8b0018
ephemeralOwner = 0x0
# 节点数据长度
dataLength = 7
# 子节点数量
numChildren = 0
2.2 修改节点数据
修改节点数据, 会导致 cZxid, ctime, dataVersion, dataLength 产生变更
[zk: localhost:2181(CONNECTED) 4] set /mynodes "this is mynodes"
cZxid = 0x1e4
ctime = Sun Feb 17 15:23:44 CST 2019
# 修改节点数据, 发生变更
mZxid = 0x1e6
mtime = Sun Feb 17 15:24:12 CST 2019
pZxid = 0x1e4
cversion = 0
# 发生变更
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
# 发生变更
dataLength = 15
numChildren = 0
2.3 创建子节点
新增子节点, 会导致 cversion, pZxid, numChildren 发生变化.
[zk: localhost:2181(CONNECTED) 5] create -e /mynodes/A ""
Created /mynodes/A
[zk: localhost:2181(CONNECTED) 6] get /mynodes
this is mynodes
cZxid = 0x1e4
ctime = Sun Feb 17 15:23:44 CST 2019
mZxid = 0x1e6
mtime = Sun Feb 17 15:24:12 CST 2019
# 发生变化
pZxid = 0x1e7
# 发生变化
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 15
# 发生变化
numChildren = 1
更多推荐
已为社区贡献4条内容
所有评论(0)