本文主要介绍 Zookeeper 的数据模型,包括 Zookeeper 的数据视图,节点类型以及节点所包含的信息。
节点
Zookeeper 的数据视图采用的是类似 Unix 的数据视图,但是并没有引入文件系统的相关概念:目录和文件,而是引入了节点的概念,称为 Znode。它是 Zookeeper 最小的组成单元,每个 Znode 包含三部分组成:
- data:表示节点所存储的数据,单个节点存储数据不能超过 1M。
- stat:表示节点的信息,例如节点创建时间,节点的版本,节点的权限等信息。
- children:表是所包含的子节点。
节点类型
Zookeeper 中的节点类型可以分为三种:
- 持久节点(Perisient Node),这类节点在创建之后将一直存在,知道有客户端对它进行显示删除,也就是说它不会因为创建其的 client 的关闭而消失。
- 临时节点(Ephemeral Node),这类节点的生命周期与创建它们的 client 绑定。也就是说当 client 的 session 关闭时,其所创建的临时节点也将被删除。这里有一点需要注意的是 session 关闭,而不是 connection loss。因为 zookeeper 的 client 支持 session 转移,也就是当所连接的 server 出现网络连接断开或者 server down 掉的情况,client 将自动选择 zookeeper 集群中的其他节点进行连接,同时将 session 转移到其他节点上。这种情况只能算 connection loss,而不会造成 session 关闭。除非,该 client 无法连接所有的节点,支持 session timeout。
- 时序节点(Sequential Node),这类节点在创建节点的时候,zookeeper
会自动为其添加一个数字后缀%10d,例如/test-0000000001。不过这类节点是不能单独存在的,需要同持久节点或临时节点组合使用形成:
- Perisient Sequential Node
- Ephemeral Sequential Node
节点信息
Znode 的信息包含下面一些字段:
czxid | 创建这个znode的zxid |
mzxid | 最后一次修改这个znode的zxid |
ctime | 该znode创建时间 |
mtime | 该znode最后一次修改的时间 |
version | 该znode的version,也就是该znode的修改次数。 |
cversion | 该znode的子节点的version |
aversion | 该znode的ACL信息version |
ephemeralOwner | 如果该znode是ephemeral node,此字段就是对应client的session;否则为0。 |
dataLength | The length of the data field of this znode. |
numChildren | 子节点个数 |
Note:zxid = znode transaction id
查看节点信息,可以使用 zkCli 中的 get 命令。
1 | [zk: localhost:2181(CONNECTED) 15] get /zk_test |