• kafka中对于zookeeper的理解和leader选举过程


    1. 首先zookeeper是什么

      zookeeper是一个开放源代码的分布式应用程序协调服务,可以把它看成是整个集群的管理者,监视者。

    2. zookeeper能做什么

      它可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能。

    3. zookeeper服务与kafka集群的联系

      

      这里首先说一下broker的概念:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker,每个broker服务器都要连接到zk服务。

    • 一个典型的kafka集群中包含若干个producer(生产者),若干broker(一般broker越多,集群吞吐率越高),若干consumer group(消费组),以及一个zookeeper服务。
    • kafka通过zookeeper管理集群配置,选举leader,以及在消费组发生变化时进行rebalance。
    • producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

    4. Leader选举流程。

      选举流程主要出现在以下两种情况发生时:

      (1)服务器初始化启动时;

      (2)服务器在运行期间leader出现故障。

      由于涉及到算法和流程较复杂,这里就以个人理解浅显的描述以下选举过程,如有不当的地方欢迎指正。

      当服务器在初始化时启动:

      假设集群中共有3台机器,分别使用server1、server2、server3等来表示,按编号以此启动起来。
      第一步:每个server发起一个投票,推荐自己作为leader服务器,投票内容为(Serverid,Zxid),分别表示服务器ID、数据ID(服务器中存放定的最大数据ID)。由于server1先启动,它的投票为(1,0),然后进入Looking状态;
      第二步:server2启动,发起投票为(2,0),并与已启动的server1交换结果,由于server2的编号2大于1,因此胜出,并告知server1。
      第三步:server1将自己的投票改为(2,0),并重新投票。而server继续维持之前投票(2,0)。这个时候统计第二轮投票,server2以两票胜出,同时判断当前投票人数为2,已经超过3台服务器的50%,因此结果生效,server2当选为Leader,状态变为LEADING;server1状态变为FOLLOWING。
      第四部:此时server3启动,发现Leader已经存在,则直接将自己的状态调整为FOLLOWING。

      注意:如果集群中有5台机器,那么由于投票人数不足50%,则需要保持Looking状态,继续等待新的投票者加入,直到超过50%为止。

      

      当服务器在运行期间leader出现故障:  

      第一步:假设server2作为leader挂了之后,剩下所有机器都会将自己的状态改为LOOKING,然后开始Leader选举过程。
      第二步:server1发出投票为(1,233),server3发出投票为(3,222)。
      第三步:两台机器互相接收来自别的服务器的投票,判断投票的有效性(是否来自LOOKING状态的服务器),然后进行将别人的投票与自己的投票进行PK,PK规则如下:1.优先检查Zxid,Zxid较大的优先作为leader;2.如果Zxid相同,那么Serverid较大的胜出。对于当前情况来看,server1胜出。
      第四步:发起第二轮投票,server3将自己投票改为(1,233),server1保持不变(1,233),此时判断投票人数超过半数,server1胜出,当选为新leader。server1状态改为LEADING,server3状态改为FOLLOWING。

    参考文章:《zookeeper的leader选举过程》

    https://blog.csdn.net/virtil33/article/details/94343215

    最懒的人就是整天忙得没时间学习、反思、成长的人。
  • 相关阅读:
    在dubbo工程中,使用druid监控
    docker在windows下上传文件到容器
    Docker容器Tomcat部署war包
    You are using the runtime-only build of Vue where the template compiler is not available. Either pre
    Vue项目用了脚手架vue-cli3.0,会报错You are using the runtime-only build of Vue where the template compiler is not available
    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    Github上传代码菜鸟超详细教程
    23种设计模式
    java面试
    latex输入希腊字母
  • 原文地址:https://www.cnblogs.com/jockeyhao/p/12180176.html
Copyright © 2020-2023  润新知