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

本文详细介绍了如何导入并运行Zookeeper3.7源码,包括解决导入时的错误,启动Zookeeper单机服务流程,以及Zookeeper的网络通信组件NIOServerCnxnFactory的四类线程作用。通过分析启动流程,展示了从客户端请求到数据处理的整个业务链路,揭示了Zookeeper如何确保数据一致性并高效处理请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值