【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码

Zookeeper3.7源码剖析

能力目标

  • 能基于Maven导入最新版Zookeeper源码
  • 能说出Zookeeper单机启动流程
  • 理解Zookeeper默认通信中4个线程的作用
  • 掌握Zookeeper业务处理源码处理流程
  • 能够在Zookeeper源码中Debug测试通信过程

1 Zookeeper源码导入

file

Zookeeper是一个高可用的分布式数据管理和协调框架,并且能够很好的保证分布式环境中数据的一致性。在越来越多的分布式系。在越来越多的分布式系统(Hadoop、HBase、Kafka)中,Zookeeper都作为核心组件使用。

file

我们当前课程主要是研究Zookeeper源码,需要将Zookeeper工程导入到IDEA中,老版的zk是通过ant进行编译的,但最新的zk(3.7)源码中已经没了build.xml,而多了pom.xml,也就是说构建方式由原先的Ant变成了Maven,源码下下来后,直接编译、运行是跑不起来的,有一些配置需要调整。

1.1 工程导入

Zookeeper各个版本源码下载地址https://github.com/apache/zookeeper,我们可以在该仓库下选择不同的版本,我们选择最新版本,当前最新版本为3.7,如下图:

file

找到项目下载地址,我们选择https地址,并复制该地址,通过该地址把项目导入到IDEA中。

file

点击IDEA的VSC>Checkout from Version Controller>GitHub,操作如下图:

file

克隆项目到本地:

file

项目导入本地后,效果如下:

file

项目运行的时候,缺一个版本对象,创建org.apache.zookeeper.version.Info,代码如下:

public interface Info {
    public static final int MAJOR=3;
    public static final int MINOR=4;
    public static final int MICRO=6;
    public static final String QUALIFIER=null;
    public static final int REVISION=-1;
    public static final String REVISION_HASH = "1";
    public static final String BUILD_DATE="2020-12-03 09:29:06";
}

1.2 Zookeeper源码错误解决

zookeeper-server中找到org.apache.zookeeper.server.quorum.QuorumPeerMain并启动该类,启动前做如下配置:

file

启动的时候会会报很多错误,比如缺包、缺对象,如下几幅图:

file

file

file

为了解决上面的错误,我们需要手动引入一些包,pom.xml引入如下依赖:

<!--引入依赖-->
<dependency>
  <groupId>io.dropwizard.metrics</groupId>
  <artifactId>metrics-core</artifactId>
  <version>3.1.0</version>
</dependency>
<dependency>
  <groupId>org.xerial.snappy</groupId>
  <artifactId>snappy-java</artifactId>
  <version>1.1.7.3</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
</dependency>
<dependency>
  <groupId>commons-cli</groupId>
  <artifactId>commons-cli</artifactId>
</dependency>

1.3 Zookeeper命令(自学)

我们要想学习Zookeeper,需要先学会使用Zookeeper,它有很多丰富的命令,借助这些命令可以深入理解Zookeeper,我们启动源码中的客户端就可以使用Zookeeper相关命令。

启动客户端org.apache.zookeeper.ZooKeeperMain,如下图:

file

启动后,日志如下:

file

1)节点列表:ls /

ls /
[dubbo, zookeeper]
ls /dubbo
[com.itheima.service.CarService]

2)查看节点状态:stat /dubbo

stat /dubbo
cZxid = 0x3
ctime = Thu Dec 03 09:19:29 CST 2020
mZxid = 0x3
mtime = Thu Dec 03 09:19:29 CST 2020
pZxid = 0x4
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 1

节点信息参数说明如下:

key value
cZxid = 0x3 创建节点时的事务ID
ctime = Thu Dec 03 09:19:29 CST 2020 最后修改节点时的事务ID
mZxid = 0x31 最后修改节点时的事务ID
mtime = Sat Mar 16 15:38:34 CST 2019 最后修改节点时的时间
pZxid = 0x31 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值