- zookeeper的数据节点可以视为树状结构(或者目录),树中的各节点被称为 znode(即zookeeper node),一个znode可以有多个子节点。zookeeper节点在结构上表现为树状;使用路径path来定位某个znode,比如/ns-1/xdr630/mysql/schema1/table1,此处ns-1、xdr630、mysql、schema1、table1分别是根节点、2级节点、3级节点以及4级节点;其中ns-1是xdr630的父节点,xdr630是ns-1的子节点,xdr630是mysql的父节点,mysql是xdr630的子节点,以此类推。
- znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时
间戳等数据结构,又像目录一样可以作为路径标识的一部分。
那么如何描述一个znode呢?一个znode大体上分为3各部分:
- 节点的数据:即znode data(节点path, 节点data)的关系就像是java map中(key,value)的关系
- 节点的子节点children
- 节点的状态stat:用来描述当前节点的创建、修改记录,包括cZxid、ctime等
节点状态stat的属性
在zookeeper shell中使用get命令查看指定路径节点的data、stat信息:
[zk: localhost:2181(CONNECTED) 7] get /ns-1/tenant
cZxid = 0x6a0000000a
ctime = Wed Mar 27 09:56:44 CST 2019
mZxid = 0x6a0000000a
mtime = Wed Mar 27 09:56:44 CST 2019
pZxid = 0x6a0000000e
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
属性说明:
- cZxid:数据节点创建时的事务 ID
- ctime:数据节点创建时的时间
- mZxid:数据节点最后一次更新时的事务 ID
- mtime:数据节点最后一次更新时的时间
- pZxid:数据节点的子节点最后一次被修改时的事务 ID
- cversion:子节点的更改次数
- dataVersion:节点数据的更改次数
- aclVersion:节点的 ACL 的更改次数
- ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的
- SessionID;如果节点是持久节点,则该属性值为 0
- dataLength:数据内容的长度
- numChildren:数据节点当前的子节点个数
节点类型
zookeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。
- 临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临
时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到
一个客户端会话,但他们对所有的客户端还是可见的。另外,ZooKeeper的临时节
点不允许拥有子节点。 - 持久化节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作
的时候,他们才能被删除