Zookeeper是开源的,如果想多了解Zookeeper或看它的源码,最好是能找到它的源码并在 IDE 里启动,可以debug看它咋执行的,能够帮助你理解其原理。

准备源码

所以我们很容易搞到它的源码,例如我们从GitHub上获取源码 或 从Apache官网获取可运行版本的压缩包(内含源码)。这里我下载的是3.4.13版本的,从GitHub拉取源码在idea运行时,编译不能通过,缺少类,原因是有些类需要data包下的类,但是没有这个data包,所以编译过不了,也就无法测试。

 
所以选择第二种,下载到 zookeeper-3.4.13.tar.gz 然后解压,和从GitHub上下载的还是有些差别的。
 

导入到IDE

然后将下载好的源码导入到idea。需创建resources目录把 conf 目录下的 log4j.properties 复制到该目录下,否则启动异常报找不到log4j.properties的错。

准备启动

然后我们找到 org.apache.zookeeper.server.quorum.QuorumPeerMain 这个类,这个是 zookeeper 的主入口,当你用脚本启动时其实运行的也是这个类。
 
题外话,看看启动脚本。
 
zkCli.sh脚本文件
 

zkCli.cmd

回来,我们打开这个类会看到有个main方法,看注释,我们需要在启动时指定配置文件。
 
/**
* To start the replicated server specify the configuration file name on
* the command line.要启动复制的服务器,请在命令行上指定配置文件名。
* @param args path to the configfile 配置文件的路径
*/
public static void main(String[] args) {
QuorumPeerMain main = new QuorumPeerMain();
try {
main.initializeAndRun(args);
} //some catchs...
  //some codes ...
     }
LOG.info("Exiting normally");
System.exit(0);
}

配置启动参数

首先运行这个类的main方法,会报错,说非法参数哦,如下

配置一下,在 Program arguments里添加配置文件的路径。

正式启动

再启动就成功了

测试是否启动成功

我们开启客户端连一下

连上了,并且有三个节点。

这段代码是一些初始化,并判断是单机启动还是集群启动

protected void initializeAndRun(String[] args)
throws ConfigException, IOException
{
QuorumPeerConfig config = new QuorumPeerConfig();
if (args.length == ) {
config.parse(args[]);
} // Start and schedule the the purge task
  DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config
    .getDataDir(), config.getDataLogDir(), config
    .getSnapRetainCount(), config.getPurgeInterval());
purgeMgr.start(); if (args.length == 1 && config.servers.size() > ) {
System.out.println("=======集群模式=======");
runFromConfig(config);
} else {
System.out.println("=======单机模式=======");
LOG.warn("Either no config or no quorum defined in config, running "
          + " in standalone mode");
ZooKeeperServerMain.main(args);
}
}


单机版启动,到这里就结束了。篇幅原因,集群版下一篇再见。


转载请注明出处

Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(单机版)的更多相关文章

  1. Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(集群版)

    上篇文章Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(单机版)讲了在 idea 里以单机的方式启动zookeeper,这篇介绍一下以集群的方式启动. 集群方式启动,才会真正 ...

  2. 2018-11-21 手工翻译Vue.js源码第一步:14个文件重命名

    背景 对现有开源项目的代码进行翻译(文件名/命名/注释) · Issue #107 · program-in-chinese/overview 简单地说, 通过翻译源码, 提高项目代码可读性(对于母语 ...

  3. spring源码第一章_获取源码并将源码转为eclipse工程

    1.通过http://gitforwindows.org/下载github 2.通过http://services.gradle.org/distributions/下载gradle:gardle类似 ...

  4. 【转】使用 vim + ctags + cscope + taglist 阅读源码

    原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...

  5. How Tomcat works — 一、怎样阅读源码

    在编程的道路上,通过阅读优秀的代码来提升自己是很好的办法.一直想阅读一些开源项目,可是没有合适的机会开始.最近做项目的时候用到了shiro,需要做集群的session共享,经过查找发现tomcat的s ...

  6. 使用 vim + ctags + cscope + taglist 阅读源码

    转自:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找到合 ...

  7. 阅读源码,从ArrayList开始

    前言 为啥要阅读源码?一句话,为了写出更好的程序. 一方面,只有了解了代码的执行过程,我们才能更好的使用别人提供的工具和框架,写出高效的程序.另一方面,一些经典的代码背后蕴藏的思想和技巧很值得学习,通 ...

  8. 阅读源码(IV)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> <阅读源码(III)> Eric S.Raymond的写于2014年的<How to learn ...

  9. 转载~Linux 平台下阅读源码的工具

    Linux 平台下阅读源码的工具 前言 看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径.个人认为: 要完全掌握一个软件的方法只有阅读源码在Windows下有sourceinsight这 ...

随机推荐

  1. c++学习书籍推荐《Beyond the C++ Standard Library》下载

    百度云及其他网盘下载地址:点我 作者简介 Björn Karlsson works as a Senior Software Engineer at ReadSoft, where he spends ...

  2. linux系统的基础优化

    目录 前言 网络优化 在虚拟软件中配置虚拟局域网 接着可以配置自己windows主机的网络连接配置 在虚拟软件中虚拟机添加网卡 虚拟机中的系统基础优化 前言 在自己做linux的相关服务实验时,是没有 ...

  3. 【POJ - 1190】生日蛋糕 (dfs+剪枝)

    Descriptions: 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为 ...

  4. 奇袭(单调栈+分治+桶排)(20190716 NOIP模拟测试4)

    C. 奇袭 题目类型:传统 评测方式:文本比较 内存限制:256 MiB 时间限制:1000 ms 标准输入输出   题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而 ...

  5. 每日一问:View.getContext() 的返回一定是 Activity 么?

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 一般我们被问到这样的问题,通常来说,答案都是否定的,但一定得知道其中的原 ...

  6. MyBatis从入门到精通:第一章配置文件log4j.properties

    配置文件: #全局配置 log4j.rootLogger=ERROR,stdout #MyBatis日志配置 log4j.logger.tk.mybatis.simple.mapper=TRACE # ...

  7. 用Python和Pandas以及爬虫技术统计历史天气

    背景 最近在计划明年从北京rebase到深圳去,所以最近在看深圳的各个方面.去年在深圳呆过一段时间,印象最深的是,深圳总是突然就下雨,还下好大的雨.对于我这种从小在南方长大但是后面又在北京呆了2年多的 ...

  8. 《 C#语言学习笔记》——自动属性

    属性是访问对象状态的首选方式,因为它们禁止外部代码实现对象内部的数据存储机制.属性还对内部数据的访问方式有了更多控制.一般以非常标准的方式定义属性,即通过一个公共属性直接访问一个私有成员. 利用自动属 ...

  9. 安装win10体验

    没事干了,心血来潮弄了个win10专业版. 讲硬盘重新分区了,没办法,原来分的太少了. 使用winpe启动,直接将下载的win10还原到c盘,成功启动,设置的时候让提示输入id,没有啊?研究发现可以先 ...

  10. Spring AOP 面向切面的Spring

    定义AOP术语 描述切面的常用术语有: 通知 (advice) 切点 (pointcut) 连接点 (joinpoint) 下图展示了这些概念是如何关联的 Spring 对AOP的支持 Spring提 ...