Zookeeper源码篇1-环境准备

366 阅读3分钟

欢迎大家关注 github.com/hsfxuebao ,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈

1. 导入并修改源码工程

从github上下载源码:github.com/apache/zook…

1.1 导入说明

这里下载的是 Zookeeper3.7.0 工程的源码,从 3.6.0 版本开始, zk 源码工程是一个可以直接导入的 maven 工程,而之前是需要通过 ant 构建的工程。

不过,该源码工程也并不是直接编译后就可直接运行的类,其需要经过一些专门的处理。 因为工程中有很多的没有任何扩展名或扩展名为.jav 或.j 的类,这些类需要经过特殊处理后 才可编译。

我们这里通过手工处理,直接对要使用到的 java 源码文件进行重命名,为其添加.java 的扩展名即可,这样就可以跟踪源码了。

1.2 模块说明

zk 源码工程中具有代码的模块共有两个: zookeeper-jute 与 zookeeper-server。 zookeeper-jute 是 zk 的底层序列化协议包。用于 zk 进行网络数据传输和本地磁盘数据存储的序列化与反序列化。zookeeper-server 是 zk 的核心功能实现包

zookeeper-server 下的包进行说明:

  • client:client要和server之间通信,就通过改包下代码实现

  • common:一些工具

  • jmx:Java Management Extensions,提供一种分布式应用的监控技术

    JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。

    JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等

    主要作用是提供接口,允许有不同的实现

  • server:服务端真正核心的代码

    • 打开server目录:quorum:选举核心代码
  • util:放了一个安全工具

2. 项目运行

项目运行的时候,缺一个版本对象,在zookeeper-server下创建 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"; 
}

2.1 Zookeeper源码错误解决

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

image.png

启动前,我们需要手动编译一下 zookeeper-jute这个包,有一些序列化的类需要编译。

启动的时候会会报很多错误,比如缺包、缺对象等,为了解决这个错误,我们需要手动引入一些包, 在zookeeper-server下的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>

重新启动,就可以启动成功了。

参考文章

zookeeper3.7版本github源码注释分析
zk3.7版本源码启动
Zookeeper原理和源码学习系列