【原创】大数据基础之Zookeeper(2)源代码解析
核心枚举
public enum ServerState {
LOOKING, FOLLOWING, LEADING, OBSERVING;
}
zookeeper服务器状态:刚启动LOOKING,follower是FOLLOWING,leader是LEADING,observer是OBSERVING;
public enum LearnerType {
PARTICIPANT, OBSERVER;
}
简单来说,zookeeper启动的核心类是QuorumPeerMain,启动之后会加载配置,同时启动QuorumPeer,QuorumPeer会从本地数据目录加载数据,然后开始选举,选举的核心类是FastLeaderElection,选举完成之后会设置状态,根据状态的不同,启动不同的类,比如Leader、Follower、Observer,leader会设置一个新的epoch,同时会等待follower向自己注册,注册完成后follower会向leader同步最新的数据,而leader则定期ping所有的follower,一旦存活的follower不足半数,leader会shutdown,然后触发集群的重新选举。
具体代码以及调用如下:
org.apache.zookeeper.server.quorum.QuorumPeerMain
initializeAndRun
runFromConfig
org.apache.zookeeper.server.quorum.QuorumPeer extends ZooKeeperThread
initialize
start
loadDataBase
org.apache.zookeeper.server.ServerCnxnFactory
start
startLeaderElection
org.apache.zookeeper.server.quorum.QuorumPeer.ResponderThread
start
createElectionAlgorithm
run
org.apache.zookeeper.server.quorum.FastLeaderElection implements Election
lookForLeader
sendNotifications
totalOrderPredicate
termPredicate
org.apache.zookeeper.server.quorum.flexible.QuorumMaj
containsQuorum
QuorumPeer.setPeerState
1 org.apache.zookeeper.server.quorum.Leader extends Learner
lead
org.apache.zookeeper.server.quorum.Leader.LearnerCnxAcceptor extends ZooKeeperThread
run
org.apache.zookeeper.server.quorum.LearnerHandler extends ZooKeeperThread
start
receive Leader.FOLLOWERINFO
epoch++
setZxid
setCurrentEpoch
waitForNewLeaderAck
startZkServer
loop
org.apache.zookeeper.server.quorum.LearnerHandler
ping
org.apache.zookeeper.server.quorum.LearnerHandler.SyncLimitCheck
check
shutdown
Leader.removeLearnerHandler
containsQuorum
shutdown
2 org.apache.zookeeper.server.quorum.Follower extends Learner
followLeader
findLeader
connectToLeader
registerWithLeader
send Leader.FOLLOWERINFO
syncWithLeader
3 org.apache.zookeeper.server.quorum.Observer extends Learner
observeLeader
选举代码解析请见 大数据基础之Zookeeper(3)选举算法
【原创】大数据基础之Zookeeper(2)源代码解析的更多相关文章
- 【原创】大数据基础之Zookeeper(1)介绍、安装及使用
zookeeper3.4.11 http://zookeeper.apache.org/ 一 简介 ZooKeeper is a centralized service for maintaining ...
- 【原创】大数据基础之Zookeeper(4)应用场景
1 集群配置管理 应用服务器的配置通常会放到properties文件中,格式为: system1.module2.prop3=value4 然后启动的时候加载,这样带来的问题是启动后无法修改,想修改必 ...
- 【原创】大数据基础之Zookeeper(3)选举算法
提到zookeeper选举算法,就不得不提Paxos算法,因为zookeeper选举算法是Paxos算法的一个变种: Paxos要解决的问题是:在一个分布式网络环境中有众多的参与者,但是每个参与者都不 ...
- 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试
决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...
- 大数据篇:Zookeeper
Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...
- 【原创】大数据基础之Impala(1)简介、安装、使用
impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...
- 【原创】大数据基础之词频统计Word Count
对文件进行词频统计,是一个大数据领域的hello word级别的应用,来看下实现有多简单: 1 Linux单机处理 egrep -o "\b[[:alpha:]]+\b" test ...
- 【原创】大数据基础之Benchmark(2)TPC-DS
tpc 官方:http://www.tpc.org/ 一 简介 The TPC is a non-profit corporation founded to define transaction pr ...
- 大数据基础知识问答----spark篇,大数据生态圈
Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...
随机推荐
- 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型
前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...
- 基于 HTML5 WebGL 的 3D 工控裙房系统
前言 工业物联网在中国的发展如火如荼,网络基础设施建设,以及工业升级的迫切需要都为工业物联网发展提供了很大的机遇.中国工业物联网企业目前呈现两种发展形式并存状况:一方面是大型通讯.IT企业的布局:一方 ...
- Python Revisited (变量)
目录 = 浅拷贝 深拷贝` 函数的默认参数为可变类型时 危险 全局变量与临时变量 global 在函数里面进行复制 再看一个例子 numpy里的bug? 待续 @ 首先,需要指出的是,Python的变 ...
- ReSharper 2017破解详细方法:
VS里面,打开ReSharper的注册窗口:ReSharper ——> Help ——> License Information... Use License Server,右侧加号,点击 ...
- DAY16、模块和包
一.模块 1.模块的加载顺序:内存 =>内置 =>sys.path(一系列自定义模块) 2.sys.path:环境变量,存放文件路径的列表 重点:默认列表第一个元素就是当前被执行文件所在的 ...
- C++/CLI泛型应用
2019年01月16日, QQ群友不知道要折腾什么, 提出了以下问题: 样例代码中的是C#语言写的, 翻译成C++/CLI就不会了, 于是我试着谢了一下, 发现可以实现, 于是就贴出来与大家分享, 源 ...
- StringUtils常用方法+StringUtils详细介绍
StringUtils常用方法+StringUtils详细介绍 StringUtils用法+StringUtils详细介绍博文来源:http://yijianfengvip.blog.163.co ...
- 打印并输出 log/日志到文件(C++)
#include <stdarg.h> #define MAX_LEN 1024 bool debug_mode; // 使用方法同 printf void lprintf(const c ...
- [原文 + 补充] 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
原文:https://github.com/alex/what-happens-when/blob/master/README.rst 一个版本的翻译: https://github.com/skyl ...
- Java【第五篇】基本语法之--数组
数组概述 数组是多个相同类型数据的组合,实现对这些数据的统一管理数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量数组中的元素可以是任何数据类型,包括基本类型和引 ...