【Zookeeper源码阅读】二、Zookeeper数据结构

异步流沙
• 阅读 325

一、Zookeeper数据结构

1.1 DataTree

每次zookeeper服务启动时,会将快照文件的数据反序列化到DataTree中,再结合日志文件将数据还原到最新状态,DataTree的主要源码如下

public class DataTree {
    private static final Logger LOG = LoggerFactory.getLogger(DataTree.class);

    // 存储节点数据,key为节点路径,value为DataNode节点信息
    private final ConcurrentHashMap<String, DataNode> nodes =
        new ConcurrentHashMap<String, DataNode>();
    
    // 略
}

从上面可以看到,nodes是一个HashMap

  • key是String类型,代表的是节点路径,比如"/app1"、"/app1/data1"等
  • value是DataNode类型,代表节点信息

1.2 DataNode

DataNode代表的是zookeeper的节点,也就是znode,其源码如下

public class DataNode implements Record {
    // 父节点
    DataNode parent;

    // 节点数据
    byte data[];

    // 节点的访问控制列表值
    Long acl;

    // 节点持久化到磁盘的状态信息
    public StatPersisted stat;

    // 子节点路径列表
    private Set<String> children = null;
}
  • parent:代表当前节点的父节点
  • data[]:节点数据
  • acl:节点的访问控制列表值
  • stat:节点持久化到磁盘的状态信息
  • children:子节点路径列表,比如/app1/data1、/app1/data2等

1.3 StatPersisted

这里看下节点持久化到磁盘的状态信息有哪些,StatPersisted的源码如下

public class StatPersisted implements Record {
  private long czxid;
  private long mzxid;
  private long ctime;
  private long mtime;
  private int version;
  private int cversion;
  private int aversion;
  private long ephemeralOwner;
  private long pzxid;
}
  • czxid:创建节点的事务ID,即创建事务的zxid。
  • mzxid:最后修改节点的事务ID,即最后一次修改事务的zxid。
  • ctime:节点的创建时间戳。
  • mtime:节点的最后修改时间戳。
  • version:节点的数据版本号,每次更新节点时会自增。
  • cversion:子节点的变更版本号,当创建、删除或修改子节点时会自增。
  • aversion:节点ACL(访问控制列表)的变更版本号,当节点的ACL发生变化时会自增。
  • ephemeralOwner:如果该节点是临时节点,则表示创建者的会话ID;如果节点是持久节点,则为0。
  • pzxid:父节点的最后一次修改的事务ID。
点赞
收藏
评论区
推荐文章
胖大海 胖大海
3年前
Linux centos7 安装zookeeper
一:下载zookeeper安装包从官网下载:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper3.5.10/apachezookeeper3.5.10.tar.gz二:上传并配置zookeeper1.放在/usr/local目录下并解压。tarzxvfapachezookeeper3.5.1
隔壁老王 隔壁老王
4年前
python调用zookeeper
ZooKeeper1.简介ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。ZooKeeper框架最初是在“Yahoo"上构建的,用于以简
Wesley13 Wesley13
3年前
java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for ...”
错误信息如下:1Exceptioninthread"main"org.apache.zookeeper.KeeperException$ConnectionLossException:KeeperErrorCodeConnectionLossfor/test2atorg.apache.zookeeper
Stella981 Stella981
3年前
Hadoop 2.6.0 HA高可用集群配置详解(二)
Zookeeper集群安装Zookeeper是一个开源分布式协调服务,其独特的LeaderFollower集群结构,很好的解决了分布式单点问题。目前主要用于诸如:统一命名服务、配置管理、锁服务、集群管理等场景。大数据应用中主要使用Zookeeper的集群管理功能。本集群使用zookeeper3.4.5cdh5.7.1版本。首先在Hado
Stella981 Stella981
3年前
Centos7
1\.下载zookeeper压缩包    \root@localhost(https://my.oschina.net/u/570656)tools\wgethttp://mirrors.shuosc.org/apache/zookeeper/zookeeper3.4.11/zookeeper3.4.11.tar.gz2\.
Stella981 Stella981
3年前
Linux安装zookeeper
安装zookeeper1、解压缩zookeeper3.4.6.tar.gz:    tarzxvfzookeeper3.4.6.tar.gz2、创建/usr/local/zookeeper文件夹:mkdirp/usr/local/zookeeper 3、进入到/usr/local/zookeeper目录
Stella981 Stella981
3年前
Dubbo+Zookeeper+SpringMVC整合实现分布式
目录DubboZookeeperSpringMVC整合实现分布式服务治理框架...1一、分布式服务治理架构原理分析...3二、先决条件...5三、Zookeeper安装与配置...63.1 Zookeeper下载与解压...63.2复制和编辑配置文件...63.3创建myid文件...73.4Zoo
Stella981 Stella981
3年前
Linux下 zookeeper集群安装
准备环境:3台linux虚拟主机,zookeeper安装包,zookeeper版本号是3.4.6,本文zookeeper安装在/usr/local目录下一、首先下载zookeepercd/usr/localwget http://apache.org/dist/zookeeper/zookeeper3.4.6/zookeeper3.4.6
可莉 可莉
3年前
2020年最新ZooKeeper面试题(附答案)
2020年最新ZooKeeper面试题1\.ZooKeeper是什么?ZooKeeper是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布
Stella981 Stella981
3年前
2020年最新ZooKeeper面试题(附答案)
2020年最新ZooKeeper面试题1\.ZooKeeper是什么?ZooKeeper是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布
Stella981 Stella981
3年前
Linux系统:Centos7下搭建ZooKeeper3.4中间件,常用命令总结
一、下载解压1、Zookeeper简介Zookeeper作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是Zookeeper并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状