基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Znode 中存储的 Stat 信息包含哪些内容?

知识点图片

在 ZooKeeper 中,每个 Znode 除了存储数据本身(Data)之外,还维护了一个名为 Stat 的状态结构。这个结构存储了关于该 Znode 的元数据(Metadata)。

Stat 结构主要包含以下字段,可以分为事务 ID时间戳版本号常规描述四类:

1. 事务 ID (Transaction IDs)

ZooKeeper 的每次写操作(创建、更新、删除)都会产生一个全局唯一的事务 ID,称为 ZXID。ZXID 用于保证操作的顺序一致性。

  • czxid (Created ZXID):
    • 引起该 Znode 创建的事务 ID。
    • 即该节点诞生时的 ZXID。
  • mzxid (Modified ZXID):
    • 该 Znode 最后一次被修改(setData)的事务 ID。
    • 注意:如果只是修改子节点,mzxid 不会变。
  • pzxid:
    • 该 Znode 的子节点列表最后一次被修改的事务 ID。
    • 只有当子节点被添加或删除时,pzxid 才会更新。修改子节点的数据内容不会更新父节点的 pzxid。

2. 时间戳 (Time)

  • ctime (Created Time):
    • 该 Znode 被创建的时间(毫秒数,距离 1970-01-01 的时间)。
  • mtime (Modified Time):
    • 该 Znode 最后一次被修改的时间(毫秒数)。

3. 版本号 (Versions)

ZooKeeper 使用版本号来实现乐观锁(Optimistic Locking)机制。在进行更新操作时,可以指定版本号,如果当前版本号与指定的不一致,更新会失败(抛出 BadVersionException)。

  • version (Data Version):
    • Znode 数据的变化次数。
    • 即使数据被修改为相同的值,版本号也会增加。
  • cversion (Children Version):
    • Znode 子节点的变化次数。
    • 指子节点的创建或删除,不包括子节点数据的修改。
  • aversion (ACL Version):
    • Znode 访问控制列表 (ACL) 的变化次数。

4. 常规描述 (Metadata)

  • ephemeralOwner:
    • 如果该节点是临时节点 (Ephemeral Node),这里存储的是创建该节点的客户端 Session ID
    • 如果该节点是持久节点 (Persistent Node),该字段值为 0
  • dataLength:
    • Znode 中存储的数据长度(字节数)。
  • numChildren:
    • 当前 Znode 拥有的子节点数量

总结表

字段名 含义 触发更新的操作
czxid 创建节点的事务 ID create
mzxid 最后修改数据的事务 ID setData
ctime 创建时间 create
mtime 最后修改时间 setData
version 数据版本号 setData
cversion 子节点版本号 create child / delete child
aversion ACL 版本号 setACL
ephemeralOwner 临时节点拥有者的 Session ID create (ephemeral)
dataLength 数据长度 create / setData
numChildren 子节点数量 create child / delete child
pzxid 子节点列表最后变更的事务 ID create child / delete child
00:00
00:00