大数据基础zookeeper源代码解析
Posted Thinking in BigData
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据基础zookeeper源代码解析相关的知识,希望对你有一定的参考价值。
五 源代码解析
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源代码解析的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段