zookeeper源码分析

zookeeper源码分析,第1张

zookeeper源码分析

:因为zk是由ant来构建的,所以需要使用ant命令来转换成工程,然后导入idea
zk下载地址:https://github.com/apache/zookeeper/tree/release-3.5.4
ant下载地址:http://ant.apache.org/bindownload.cgi


一、ant安装配置

1、配置环境变量
系统环境变量中添加:ANT_HOME:D:ant
path变量结尾添加:;%ANT_HOME%bin;%ANT_HOME%lib

2、验证
cmd中:ant -version


二、编译zookeeper

1、打开cmd,在zk根路径下执行 ant eclipse

执行后发现报错了,不用担心,我们需要修改一个配置
修改源码中build.xml中的配置,将地址:
https://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
然后再去执行 ant eclipse命令,执行成功!


#### 三、导入idea ![在这里插入图片描述](https://img-blog.csdnimg.cn/f69605dd8c45441d821945e18b1183b1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX0FkbWlu,size_19,color_FFFFFF,t_70,g_se,x_16) 四、选举算法源码

Zookeeper 的 Leader 选举类是 FastLeaderElection,该类是 ZAB 协议在 Leader 选举中的工程应用,所以直接找到该类对其进行分析。该类中的最为重要的方法为 lookForLeader(),是选举 Leader 的核心方法。该方法大体思路可以划分为以下几块:

选举前的准备工作
创建选举对象、选举过程中需要用到的集合,初始化选举时限等。将自己作为初始化 Leader 投出去
在当前 Server 第一次投票时会先将自己作为 Leader,然后将自己的选票广播给其它所有 Server。验证自己的投票与大家的投票谁更适合做 Leader
在“我选我”后,当前 Server 同样会接收到其它 Server 发送来的选票通知(Notification)。通过 while 循环,遍历所有接收到的选票通知,比较谁更适合做 Leader。若找到一个比自己更适合的 Leader,则修改自己选票,重新将新的选票广播出去。当然,每验证一个选票,则会将其记录到一个集合中,将来用于进行票数统计。判断本轮选举是否结束
在每次验证过谁更适合做 Leader 后,会马上判断当前的选举是否可以结束了,即当前主机所推荐的这个选票是否过半了。若过半了,则直接完成后续的一些收尾工作,例如清空选举过程中所使用的集合,以备下次使用;再例如,生成最终的选票,以备其它 Server来同步数据。若没有过半,则继续从队列中读取出下一个来自于其它主机的选票,然后进行验证。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5704949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存