数据模型

在 zookeeper 中,可以说 zookeeper 中的所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。

整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。

数据模型 znode 结构详解 - 图1通过get /zookeeper来获取节点得属性信息。
image.png

  • pZxid

    添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)

  • cversion

    子节点版本号(子节点的更改次数),子节点每次修改版本号加1;

  • dataVersion

    数据版本号(节点数据的更改次数),数据每次修改该版本号加1;

  • aclVersion

    权限版本号(节点的 ACL 的更改次数),权限每次修改该版本号加1;

  • ephemeralOwner

    创建该临时节点的会话的sessionID。(如果该节点是持久节点,那么这个属性值为0)

  • numChildren

    节点拥有子节点的数量(只统计直接子节点的数量)

节点类型

zookeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变

  • 临时节点

该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,ZooKeeper的临时节点不允许拥有子节点。

  • 持久化节点

该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

节点特点

  • 同一级唯一性
  • 创建节点时必须为全路径
  • 临时节点存活周期为客户端连接时期
  • 节点具有watch 机制,可以监听节点变化
  • 删除节点只能一级一级删除

    新版本可以通过 deleteall 命令递归删除