Zookeeper的源码环境的搭建和源码解读

一、环境搭建

1、安装ant,并添加环境变量

(1)下载地址:https://ant.apache.org/bindownload.cgi
(2)下载版本:1.10.7,zip包;
(3)解压,配置环境变量ANT_HOME=D:\apache-ant-1.10.7-bin\apache-ant-1.10.7;
(4)编辑Path,增加%ANT_HOME%\bin;
(5)编辑classpath,增加%ANT_HOME%\lib;

2、替换build.xml文件内容


  http://downloads.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2
替换为:
  http://ufpr.dl.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2

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

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

<dependency org="org.apache.zookeeper" name="zookeeper" rev="3.5.8"/>  

 

4、编译为eclipse工程

进入到zookeeper源码的根目录,执行命令: ant eclipse 

二、源码的解读

 1、项目介绍

  • zookeeper-recipes: 示例源码;
  • zookeeper-client: C语言客户端;
  • zookeeper-server:主体源码;

2、服务的启动

Zookeeper的代码分为单机版启动和集群版启动;

2.1 启动前的准备

a. 在启动之前,先将项目的 pom.xml 文件的 scope 配置为 provided 注释了;

b. 配置conf 下的配置文件,拷贝 zoo_sample.cfg 文件为 zoo.cfg,并修改 dataDir 的路径 修改为 windows 系统的路径;

c. 将 conf 下的 log4j.properties 文件拷贝到 target 下的 class 目录下:

2.2 单机版启动

 服务端:ZookeeperServerMain

 客户端:ZookeeperMain

2.3 集群版启动

服务端:QuorumPeerMain

2.4 启动的基本流程

  • 加载配置文件去初始化(QuorumPeerMain 或 ZookeeperServerMain)
  • 初始化对外服务(ServerCnxnFactory):初始化网路编程相关的服务;默认使用java NIO,官网推荐使用 Netty;
  • 初始化内存数据库(ZkDatabase):Zookeeper的数据存放在内存中的,所以不能存储大规模的数据;内存的数据也要保存到硬盘的文件中的,服务启动的时候再见数据从硬盘中加载到内存中。文件有2种,快照文件和日志文件;快照文件是某一个快照文件保存的是某一段时间节点的所有的数据;内存文件并不是一修改就去保存到文件中,若将数据刚刚写入服务就挂掉了,还没有保存的快照文件中,可以从日志文件中恢复数据到内存中。
  • 初始化会话管理器(SessionTrackerImpl):客户端连接到服务端的时候有一个会话管理器;会话管理器会定时的去扫描会话,看有没有会话过期,过期了之后就会清除这个会话对应的临时节点数据也清除掉;zookeeper会将所有的会话按照过期时间去划分到一个个的桶中,桶中有一个过期的时间点,会话管理器会去扫描一个一个的桶,若桶过期,则说明该桶中的所有会话都过期了。
  • 初始选举(FastLeaderElection):集群启动有选举,单机启动没有选举;

 

posted @ 2020-07-22 21:00  风止雨歇  阅读(710)  评论(0编辑  收藏  举报