核心枚举

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)源代码解析的更多相关文章

  1. 【原创】大数据基础之Zookeeper(1)介绍、安装及使用

    zookeeper3.4.11 http://zookeeper.apache.org/ 一 简介 ZooKeeper is a centralized service for maintaining ...

  2. 【原创】大数据基础之Zookeeper(4)应用场景

    1 集群配置管理 应用服务器的配置通常会放到properties文件中,格式为: system1.module2.prop3=value4 然后启动的时候加载,这样带来的问题是启动后无法修改,想修改必 ...

  3. 【原创】大数据基础之Zookeeper(3)选举算法

    提到zookeeper选举算法,就不得不提Paxos算法,因为zookeeper选举算法是Paxos算法的一个变种: Paxos要解决的问题是:在一个分布式网络环境中有众多的参与者,但是每个参与者都不 ...

  4. 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试

    决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...

  5. 大数据篇:Zookeeper

    Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...

  6. 【原创】大数据基础之Impala(1)简介、安装、使用

    impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...

  7. 【原创】大数据基础之词频统计Word Count

    对文件进行词频统计,是一个大数据领域的hello word级别的应用,来看下实现有多简单: 1 Linux单机处理 egrep -o "\b[[:alpha:]]+\b" test ...

  8. 【原创】大数据基础之Benchmark(2)TPC-DS

    tpc 官方:http://www.tpc.org/ 一 简介 The TPC is a non-profit corporation founded to define transaction pr ...

  9. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

随机推荐

  1. C#中的虚函数及继承关系

    转载:http://blog.csdn.net/suncherrydream/article/details/8423991 若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法. 虚 ...

  2. java对象池commons-pool-1.6详解(一)

    自己的项目中用到了 对象池 commons-pool: package com.sankuai.qcs.regulation.protocol.client; import com.dianping. ...

  3. mysql-笔记 json

    1 JSON 列不能有non-NULL 默认值 2 JSON值:数组:["abc",10,null,true,false] 可嵌套 对象:{"k1":" ...

  4. vs2017开发IOS(vs2017 xamarin 连接mac)

    这两天突然记起巨软的Visual Studio 2017 好像有说可以用C#开发IOS和Android应用,所以就自己去尝试了下生成过程. 相对与IOS来说,Android的生成过程还是比较容易的没有 ...

  5. BZOJ3498PA2009 Cakes——三元环

    题目描述 N个点m条边,每个点有一个点权a.对于任意一个三元环(j,j,k)(i<j<k),它的贡献为max(ai,aj,ak) 求所有三元环的贡献和.N<100000,,m< ...

  6. python yield 理解与用法

    1.一句话快速理解 yield 等于 return  这么简单理解 2.详细说明: yield和return的关系和区别了,带yield的函数是一个生成器,而不是一个函数了 这个生成器有一个函数就是n ...

  7. 【转】如何在 GitHub 上找到你要的代码?

    [来源]

  8. <数据结构基础学习>(四)链表 Part 1

    一.链表基础 动态数组.栈.队列底层都是依托静态数组实现的,靠resize来解决固定容量问题. 链表是真正的动态数据结构,是一种最简单的一种动态数据结构. 更深入的理解引用(或者指针). 更深入的理解 ...

  9. unix文件系统中的硬链接和软连接

    硬链接: 一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名.但是,Unix/Linux系统允许,多个文件名指向同一个inode号码. 这意味着 ...

  10. java 11 ZGC(可伸缩,低延迟的gc)

    ZGC, A Scalable Low-Latency Garbage Collector(Experimental) 可伸缩,低延迟的gc ZGC, 这应该是JDK11最为瞩目的特性, 没有之一. ...