源码分析,最关键的是要找到一个入口,对于zk的leader选举,并不是由客户端来触发,而是在启动的时候会触发一次选举。因此我们可以直接去看启动脚本zkServer.sh中的运行命令

ZOOMAIN就是QuorumPeerMain。那么我们基于这个入口来看

QuorumPeerMain.main方法

main方法中,调用了initializeAndRun进行初始化并且运行

protected void initializeAndRun(String[] args) throws ConfigException, IOException{ //这段代码比较简单,设置配置参数,如果args不为空,可以基于外部的配置路径来进行解析 QuorumPeerConfig config = new QuorumPeerConfig(); if (args.length == 1) { config.parse(args[0]); } // 这里启动了一个线程,来定时对日志进行清理,从命名来看也很容易理解 DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config.getDataDir(), config.getDataLogDir(), config.getSnapRetainCount(), config.getPurgeInterval()); purgeMgr.start(); // 如果是集群模式,会调用runFromConfig.servers实际就是我们在zoo.cfg里面配置的集群节点 if (args.length == 1 && config.servers.size() > 0) { runFromConfig(config); } else {//否则直接运行单机模式 LOG.warn("Either no config or no quorum defined in config, running "+ " in standalone mode"); // there is only server in the quorum -- run as standalone ZooKeeperServerMain.main(args); }
}

leader选举的源码分析相关推荐

  1. leader选举的源码分析-startLeaderElection

    看到这个方法,有没有两眼放光的感觉?没错,前面铺垫了这么长,终于进入leader选举的方法了 synchronized public void startLeaderElection() { try ...

  2. leader选举的源码分析-QuorumPeer.start

    QuorumPeer.start方法,重写了Thread的start.也就是在线程启动之前,会做以下操作 1. 通过loadDataBase恢复快照数据 2. cnxnFactory.start()  ...

  3. leader选举的源码分析-Messenger

    在Messenger里面构建了两个线程,一个是WorkerSender,一个是WorkerReceiver. 这两个线程是分别用来发送和接收消息的线程.具体做什么,暂时先不分析. Messenger( ...

  4. leader选举的源码分析-FastLeaderElection

    初始化FastLeaderElection,QuorumCnxManager是一个很核心的对象,用来实现领导选举中的网络连接管理功能,这个后面会用到 public FastLeaderElection ...

  5. leader选举的源码分析-quorumPeer.createElectionAlgorithm

    根据对应的标识创建选举算法 protected Election createElectionAlgorithm(int electionAlgorithm){ Election le=null; / ...

  6. leader选举的源码分析-FastLeaderElection.starter

    starter方法里面,设置了一些成员属性,并且构建了两个阻塞队列,分别是sendQueue和recvqueue.并且实例化了一个Messager private void starter(Quoru ...

  7. leader选举的源码分析-runFromConfig

    从名字可以看出来,是基于配置文件来进行启动. 所以整个方法都是对参数进行解析和设置 , 因为这些参数暂时还没用到,所以没必要去看.直接看核心的代码 quorumPeer.start(), 启动一个线程 ...

  8. 【Zookeeper】源码分析之Leader选举(一)

    一.前言 分析完了Zookeeper中的网络机制后,接着来分析Zookeeper中一个更为核心的模块,Leader选举. 二.总结框架图 对于Leader选举,其总体框架图如下图所示 说明: 选举的父 ...

  9. Zookeeper之Leader选举源码分析

    Zookeeper源码下载地址:https://github.com/apache/zookeeper 1.选举流程 Zookeeeper的Leader选举会分两个过程. 服务启动时的leader选举 ...

最新文章

  1. halcon:(4)halcon中XLD的概念与应用----汽车引擎盖圆孔检测
  2. 关于html和CSS的几个基本知识点
  3. TypePerf收集服务器性能
  4. Java获得泛型类中T的实例
  5. js 拼接html 表格,js合并table单元格(拼table的时候并不知道具体几行几列)
  6. java 的HashMap底层数据结构
  7. 取消XP和2000专业版的IIS的用户数量限制
  8. css-博客圆形头象的制作
  9. linux ansible_使用Ansible在Raspberry Pi上构建基于Linux的HPC系统
  10. 力扣 根据数字二进制下1的数目排序
  11. .htaccess 语法以及应用
  12. NTP、PTP时间同步服务器(时钟系统)
  13. 前馈神经网络求解XOR问题
  14. es6 箭头函数 模板字符串 点点点运算符
  15. 软件Craft.io指导
  16. 一款软件界面的重要性
  17. Calcite优化规则之ProjectAggregateMergeRule
  18. SQL Sever:关于外键引用无效表的问题
  19. 用户注册(request,get和post中文乱码)
  20. java-net-php-python-ssm个人理财管理系统登陆计算机毕业设计程序

热门文章

  1. Android中menu详解(转)
  2. checkbox全选 js
  3. Java架构师成长之道之Java数据计算
  4. CF1066F Yet another 2D Walking
  5. Go语言学习笔记(十八)之文件读写
  6. 学习进度条(第十五周)
  7. POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
  8. Oracle通过主键id删除记录很慢
  9. 利用 IHttpHandler 自定义 HTTP 处理程序
  10. break、continue和return在程序中的作用