环境准备
- Maven:3.6.3
- Jdk:1.8.0_181
- idea:2021.1.1 Community Edition(社区版)
1、下载ZooKeeper源码
官网地址:https://github.com/apache/zookeeper
选择需要的版本下载。
本例下载的是 release-3.6.0 版本,下载完后解压。
2、使用Idea打开项目,进行编译
- 导入Idea:File --> Open --> 选择ZooKeeper项目目录 zookeeper-3.6.0
- 编译命令:mvn clean package -Dmaven.test.skip=true
可能出现的错误
问题1:[ERROR] Failed to execute goal org.codehaus.mojo:properties-maven-plugin:1.0.0:read-project-properties (default) on project zookeeper: Properties could not be loaded from File: /Users/h__d/Documents/git-repository/zookeeper-3.6.0/zookeeper-server/src/main/resources/git.properties -> [Help 1]
分析:缺少了 zookeeper-3.6.0/zookeeper-server/src/main/resources/git.properties 文件,而properties-maven-plugin需要使用此文件
解决:添加 git.properties 文件,内容如下,最好不要注释插件,否则还会有问题
# git提交id(编一个,或使用github上的id) git.commit.id=9758d25 # 构建时间 build.time=2021-05-26
3、运行ZooKeeper服务端
1)添加配置文件,复制conf/zoo_sample.cfg,重命名文zoo.cfg
2)配置日志配置文件:将conf/log4j.properties 复制到 zookeeper-server/src/main/resources 下面
且在zookeeper-server下src/main/resource上,鼠标右键,Mark Directory as -> Root Resources
3)找到服务端启动类
分析 bin/zkServer.sh 启动脚本 -> 找到 start 启动参数对应的逻辑 -> 找到主启动类参数:ZOOMAIN -> ZOOMAIN的值:org.apache.zookeeper.server.quorum.QuorumPeerMain
找到 ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain",QuorumPeerMain即为服务端主启动类
ZOOCFG="$2" 可知是通过外部传参进来的
4)运行QuorumPeerMain服务端主启动类,且进行运行配置
可能出现的错误
问题1:Exception in thread "main" java.lang.NoClassDefFoundError: com/codahale/metrics/Reservoir
at org.apache.zookeeper.metrics.impl.DefaultMetricsProvider$DefaultMetricsContext.lambda$getSummary$2(DefaultMetricsProvider.java:126)
分析:因为有些类引入是provided,把(zookeeper-3.6.0/zookeeper-server/pom.xml)相关的provided去掉就行了。这里jline除外
解决:把zookeeper-server/pom.xml中的 <scope>provided</scope> 去掉
4、运行ZooKeeper客户端
1)找到客户端启动类
分析 bin/zkCli.sh 客户端启动脚本 -> 代码很少,看到 Java类:org.apache.zookeeper.ZooKeeperMain
2)运行 ZooKeeperMain 客户端启动类,且进行运行配置
3)运行效果