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

1 系列目录

2 搭建步骤

2.1 到github中fork该项目

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

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

先看下大体的代码格式:

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

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

git checkout branch-3.4

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

ant eclipse

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

上述两个问题解决后,再重新执行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采用log4j来作为日志输出,所以需要将log4j的配置文件(在conf文件夹中)放置到类路径下。

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

然后就可以Run了。

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

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

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

4 结束语

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

时间: 2024-10-03 04:36:48

ZooKeeper源码研究系列(1)源码环境搭建的相关文章

ZooKeeper源码研究系列(2)客户端创建连接过程分析

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 客户端API简单使用 2.1 demo案例1 一个最简单的demo如下: public class ZookeeperConstructorSimple implements Watcher{ private static CountDownLatch conne

ZooKeeper源码研究系列(3)单机版服务器介绍

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 单机版服务器启动方式 单机版的服务器启动,使用ZooKeeperServerMain的main函数来启动,参数分为两种: 只有一个参数:表示为一个配置文件地址 有2~4个参数:分别表示端口.dataDir.tickTime.maxClientCnxns 详细介绍见

ZooKeeper源码研究系列(4)集群版服务器介绍

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 集群版服务器启动过程 启动类是org.apache.zookeeper.server.quorum.QuorumPeerMain,启动参数就是配置文件的地址 2.1 配置文件说明 来看下一个简单的配置文件内容: tickTime=4000 initLimit=10

ZooKeeper源码研究系列(5)集群版建立连接过程

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 各服务器角色的请求处理器链 先介绍下Leader.Follower.Observer服务器的请求处理器链 2.1 Leader服务器 PrepRequestProcessor->ProposalRequestProcessor->CommitProcessor-

.NET Framework源码研究系列之---ArrayList与LinkedList

在上一篇<.NET Framework源码研究系列之---马甲List>中我们一起研究了.NET中 List的源代码,也得到一些兄弟的热心反馈.其中一位仁兄说希望看到ArrayList与LinkedList源 代码,所以今天就以此为话题,大家一起看一下.NET中是如何实现ArrayList和LinkedList 的. 我们先看ArrayList和LinkedList在.NET中的位置,ArrayList的命名空间是 System.Collections,LinkedList的命名空间是Syst

.NET Framework源码研究系列之---马甲List

在上一篇随笔<.NET Framework源码研究系列之---Delegate>中我们一起研究了.NET 中是如何实现委托的.今天我们一起研究一下.NET中我们用的最多的一个集合类之一List. 大家都知道,在.NET集合类中List如Array一样都是一个顺序一维数组,与Array不同的是,我 们可以更方便的操作List类型的集合,比如插入数据,删除数据,排序等等,那么.NET源码中List 是如何实现的呢?我们在使用List相对Array的优点时会不会有其他方面的代价呢?从List的源码

.NET Framework源码研究系列之---万法归宗Object

经过前面三篇关于.NET Framework源码研究系列的随笔,相信大家都发现其实.NET Framework的实现其实并不复杂,也许跟我们自己做的项目开发差不多.本人也是这样的看法.不 过,经过仔细深入的研究,我们还是会发现一下平时很难注意到的东西,而这些东西对我们完善思 路,开阔眼界,锻炼良好的编码素质有着很大的意义. 我们知道.NET中所有的类型(包括:引用类型,值类型)都从Object类派生过来,由此可以说 Object是所有类型的根本.那么今天我们就研究.NET(C#)中一切元素的根本

.NET Framework源码研究系列之---Delegate

曾几何时能看到微软产品的源码简直是天方夜谭,不过现在这却成了现实,微软终于对外开放 了它的产品的源代码.抛去开源运动与微软之间的世代情仇,抛去微软这一做法的初衷,这总归是 件好事,能够让我们拨开云雾,一窥优秀产品的秘密. 前两天看到有位仁兄在随笔中的留言,说他以为".NET中的设计模式"是在讲.NET Framework 与设计模式的关系,其实不是,不过这也让我想起来自己确实研究过.NET Framework的源码,于是 就找打算找时间把自己的心得体会拿出来和大家一起分享. 今天就先从

一起谈.NET技术,.NET Framework源码研究系列之---Delegate

前言 曾几何时能看到微软产品的源码简直是天方夜谭,不过现在这却成了现实,微软终于对外开放了它的产品的源代码.抛去开源运动与微软之间的世代情仇,抛去微软这一做法的初衷,这总归是件好事,能够让我们拨开云雾,一窥优秀产品的秘密. 前两天看到有位仁兄在随笔中的留言,说他以为".NET中的设计模式"是在讲.NET Framework与设计模式的关系,其实不是,不过这也让我想起来自己确实研究过.NET Framework的源码,于是就找打算找时间把自己的心得体会拿出来和大家一起分享. 今天就先从最