Zookeper znode 数据结构?

发布于 2020-11-26 22:11:20
关注者
0
被浏览
599
1 个回答
  • 面试哥
    面试哥 2020-11-26
    为面试而生,有面试问题,就找面试哥。

    每个 znode 由 2 部分组成:

    • stat :状态信息
    • data :节点存放的数据的具体内容

    如下所示,我通过 get 命令来获取 根目录下的 dubbo 节点的内容。(get 命令在下面会介绍到)。

    [zk: 127.0.0.1:2181(CONNECTED) 6] get /dubbo# 该数据节点关联的数据内容为空null# 下面是该数据节点的一些状态信息,其实就是 Stat 对象的格式化输出cZxid = 0x2ctime = Tue Nov 27 11:05:34 CST 2018mZxid = 0x2mtime = Tue Nov 27 11:05:34 CST 2018pZxid = 0x3cversion = 1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1Copy to clipboardErrorCopied
    

    Stat 类中包含了一个数据节点的所有状态信息的字段,包括事务 ID-cZxid、节点创建时间-ctime 和子节点个数-numChildren 等等。

    下面我们来看一下每个 znode 状态信息究竟代表的是什么吧!(下面的内容来源于《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》,因为 Guide 确实也不是特别清楚,要学会参考资料的嘛!) :

    znode 状态信息解释
    cZxidcreate ZXID,即该数据节点被创建时的事务 id
    ctimecreate time,即该节点的创建时间
    mZxidmodified ZXID,即该节点最终一次更新时的事务 id
    mtimemodified time,即该节点最后一次的更新时间
    pZxid该节点的子节点列表最后一次修改时的事务 id,只有子节点列表变更才会更新 pZxid,子节点内容变更不会更新
    cversion子节点版本号,当前节点的子节点每次变化时值增加 1
    dataVersion数据节点内容版本号,节点创建时为 0,每更新一次节点内容(不管内容有无变化)该版本号的值增加 1
    aclVersion节点的 ACL 版本号,表示该节点 ACL 信息变更次数
    ephemeralOwner创建该临时节点的会话的 sessionId;如果当前节点为持久节点,则 ephemeralOwner=0
    dataLength数据节点内容长度
    numChildren当前节点的子节点个数

     

     

知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看