zookeeper 的数据模型

2021-06-11 19:13:06 浏览数 (1)

1. zookeeper的数据模型

  • 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信息:

代码语言:javascript复制
[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的临时节 点不允许拥有子节点。
  • 持久化节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作 的时候,他们才能被删除

0 人点赞