基本概念

1. zookeeper数据存储

ZooKeeper将所有数据存储在内存中,数据模型是一棵树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个ZNode,如 /hbase/master,其中 hbase 和 master 都是 ZNode。每个 ZNode 上都会保存自己的数据内容,同时会保存一系列属性信息

2. 临时节点与持久化节点

持久节点是指一旦这个 ZNode 被创建了,除非主动进行 ZNode 的移除操作,否则这个 ZNode 将一直保存在 ZooKeeper 上

临时节点(Ephemeral Node)是一种特殊类型的节点,它们在创建该节点的客户端会话结束时会自动被删除。使用 ZooKeeper 的命令行客户端来检查节点的状态:

[zk: localhost:2181(CONNECTED) 3] stat /java-tutorial/lock-space/account_1/_c_5479718a-97e3-4320-945e-1a53b6d9afc1-lock-0000000000 
cZxid = 0x13a
ctime = Fri Jun 13 21:16:17 CST 2025
mZxid = 0x13a
mtime = Fri Jun 13 21:16:17 CST 2025
pZxid = 0x13a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000008942b000e
dataLength = 10
numChildren = 01

stat命令输出结果中,如果 EphemeralOwner 字段的值不为0则表示该节点是临时节点。EphemeralOwner 字段存储的是创建该临时节点的会话ID。

3. 创建节点

[zk: localhost:2181(CONNECTED) 22] create /test_node_persistent
[zk: localhost:2181(CONNECTED) 23] stat /test_node_persistent 
cZxid = 0x82a
ctime = Thu Jun 12 23:29:24 CST 2025
mZxid = 0x82a
mtime = Thu Jun 12 23:29:24 CST 2025
pZxid = 0x82a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0
[zk: localhost:2181(CONNECTED) 24] create -e /test_node_ephemeral
Created /test_node_ephemeral
[zk: localhost:2181(CONNECTED) 25] stat /tetst_node_ephemeral 
cZxid = 0x82b
ctime = Thu Jun 12 23:29:24 CST 2025
mZxid = 0x82b
mtime = Thu Jun 12 23:29:24 CST 2025
pZxid = 0x82b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x10001c233980090
dataLength = 0
numChildren = 0