文档章节

ZooKeeper源码研究系列(1)源码环境搭建

乒乓狂魔
 乒乓狂魔
发布于 2015/07/29 07:03
字数 1029
阅读 6042
收藏 54

#1 系列目录

#2 搭建步骤

##2.1 到github中fork该项目

项目地址 https://github.com/apache/zookeeper。fork完成之后就存至自己的仓库中了。

##2.2 clone上述自己的仓库地址到本地

先看下大体的代码格式:

ZooKeeper的源码目录

##2.3 使用ant对源码编译成eclipse工程

首先选定一个分支,我自己选择branch-3.4分支来进行源码研究。即

git checkout branch-3.4

上述源码还不是eclipse工程。需要使用ant eclipse命令来转换成eclipse工程。ant就不用再说了,自行网上搜索与配置。

ant eclipse

这里来重点说说ant eclipse执行失败的问题。

  • 1 上述命令会下载ant-eclipse-1.0.bin.tar.bz2文件,老是下载不成功,无法继续下去

    修改源码中build.xml中的配置,将地址

    get src="http://downloads.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
    

    更换成如下地址

    get src="http://ufpr.dl.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
    
  • 2 还发现缺少依赖包 commons-collections

    在ivy.xml文件中加入如下配置

    <dependency org="commons-collections" name="commons-collections" rev="3.0"/>
    

上述两个问题解决后,再重新执行ant eclipse命令。

##2.4 导入项目到eclipse工程中

将eclipse的编译器版本设置为1.7。然后整个世界就安静了,终于不再报错了。下面就是要看看如何在eclipse中运行

#3 运行ZooKeeper

我们首先看下单机版ZooKeeper的启动类org.apache.zookeeper.server.ZooKeeperServerMain。

它的启动参数有两种情况:

情况1:直接给出相应的参数设置。

有4个参数,前两个参数必填,后两个参数可选

对客户端暴漏出的端口port,dataDir的目录,tickTime值,maxClientCnxns值(最大的客户端连接数)。下面分别来简单介绍下:

  • 对客户端暴漏出的端口port,即如下客户端代码指定的端口

    new ZooKeeper("192.168.126.130:2181",5000,this)
    
  • dataDir的目录

    ZooKeeper有两类数据要存储。一种就是事务记录,另一种就是ZooKeeper的内存树中的数据,以快照方式存储。 所以可以给这两种数据指定不同的目录。dataDir用来指定内存树快照的存储位置,dataLogDir用来指定事务记录的存储位置。只给出了dataDir的目录,则代表两种数据都存储在该目录下。

  • tickTime值,单位ms,默认3000

    • 用途1:用于指定session检查的间隔

      服务器会每隔一段时间检查一次连接它的客户端的session是否过期。该间隔就是tickTime。

    • 用途2:用于给出默认的minSessionTimeout和maxSessionTimeout

      如果没有给出maxSessionTimeout和minSessionTimeout(为-1),则minSessionTimeout和maxSessionTimeout的取值如下:

      minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;
      maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;
      

      分别是tickTime的2倍和20倍。

      客户端代码在创建ZooKeeper对象的时候会给出一个sessionTimeout时间,而上述的minSessionTimeout和maxSessionTimeout就是用来约束客户端的sessionTimeout。源码如下:

      输入图片说明

  • maxClientCnxns值,用于指定服务器端最大的连接数。

参数说完了,我们就来设置一下:

ZooKeeper参数

同时,ZooKeeper采用log4j来作为日志输出,所以需要将log4j的配置文件(在conf文件夹中)放置到类路径下。

所以该项目右键,Build Path-》Add Class Folder 添加conf文件夹作为类路径的一部分。

然后就可以Run了。

情况2:给出配置文件地址

当org.apache.zookeeper.server.ZooKeeperServerMain类的启动参数只有一个时,则代表着配置文件的路径。

也可以修改conf文件夹中的zoo_sample.cfg配置文件,修改下dataDir指定的路径。然后把该配置文件的路径作为参数

配置文件启动

#4 结束语

至此完成了ZooKeeper的源码环境搭建,可以随意修改和debug了。下一篇文章就会介绍下客户端和服务器端的交互过程。

© 著作权归作者所有

乒乓狂魔

乒乓狂魔

粉丝 1050
博文 109
码字总数 278265
作品 0
长宁
程序员
私信 提问
加载中

评论(4)

K_ONE
K_ONE
mark
bad_brain
bad_brain
我这边不需要修改也能跑起来,应该是网络能连上
唐家V
唐家V
分钟了好多,收藏
xiejuntao
xiejuntao
谢谢分享。
ZooKeeper源码研究寻求小伙伴

最近正在研究ZooKeeper源码,有这个意向的小伙伴吗?来一起探讨和研究 现在想寻求能挤出时间、经常研究源码的小伙伴,终极目标能够改造ZooKeeper: 利用空余时间研究源码,平时一起交流探讨,...

乒乓狂魔
2015/08/06
800
7
docker zookeeper 集群搭建

前言 其实zookeeper在一般的公司的应用不太多,注册中心、分布式锁、选举等等。之前用dubbo,就会用到zookeeper作为服务注册中心,现在转向springcloud,就很少用zookeeper了。但是近期研究分...

田心双木
2018/09/05
3.7K
0
Zookeeper:zookeeper源码笔记

前言: https://gitee.com/suyujie/zookeeper-test.git 最近在找工作,之前在使用zookeeper,上手太容易了,所以觉得没啥特别东西,但后来面试的时候,面试官问了zookeeper的很多东西,才发现...

琴兽
04/03
81
0
SolrCloud和MultiCore的区别

一、SolrCloud 与 MultiCore 的本质区别SolrCloud 用多台机搭建一个SolrCore(即整个系统只有一套schema,solrconfig)MultiCore 是多个独立的服务,不同的core可以用几套schema,solrconfi...

clebeg
2013/09/19
2.6K
1
【Zookeeper系列三】ZooKeeper Java API使用

Zookeeper系列 【Zookeeper系列一】Zookeeper应用介绍与安装部署 【Zookeeper系列二】ZooKeeper典型应用场景实践 【Zookeeper系列三】ZooKeeper Java API使用 【Zookeeper系列四】ZooKeeper...

陶邦仁
2015/11/18
3.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部