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

原文地址:https://www.cnblogs.com/jockeyhao/p/12180176.html

时间: 2024-07-31 15:56:35

kafka中对于zookeeper的理解和leader选举过程的相关文章

面试题:说说你对ZooKeeper集群与Leader选举的理解?

ZooKeeper是一个开源分布式协调服务.分布式数据一致性解决方案.可基于ZooKeeper实现命名服务.集群管理.Master选举.分布式锁等功能. 高可用 为了保证ZooKeeper的可用性,在生产环境中我们使用ZooKeeper集群模式对外提供服务,并且集群规模至少由3个ZooKeeper节点组成. ? 集群至少由3个节点组成?? ZooKeeper其实2个节点也可以组成集群并对外提供服务,但我们使用集群主要目的是为了高可用.如果2个节点组成集群,其中1个节点挂了,另外ZooKeeper

跟着实例学习ZooKeeper的用法: Leader选举

http://colobu.com/2014/12/12/zookeeper-recipes-by-example-1/ ZooKeeper官方给出了使用zookeeper的几种用途. Leader Election Barriers Queues Locks Two-phased Commit 其它应用如Name Service, Configuration, Group Membership 在实际使用ZooKeeper开发中,我们最常用的是Apache Curator. 它由Netflix

Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。

转自:http://www.cnblogs.com/mindwind/p/5231986.html Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然发散的比较多,相对冗长.读完后掩卷沉思觉得还是整理一下才会更牢靠,变成真正属于自己的.这里我就借助前面黑白棋落子里第一种极简思维来描述和概念验证下 Raft 协议的工作方式. 在一个由 Raft 协议组织的集群中有三类角色: Leader(领袖) Follower(群众) Candidate(候选人

【分布式】Zookeeper的Leader选举

一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概述 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服务器初始化启动. (2) 服务器运行期间无法和Leader保持连接. 下面就两种情况进行分析讲解. 1. 服务器启动时期的Leader选举 若进行

第四章 Leader选举算法分析

Leader选举 学习leader选举算法,主要是从选举概述,算法分析与源码分析(后续章节写)三个方面进行. Leader选举概述 服务器启动时期的Leader选举 选举的隐式条件便是ZooKeeper的集群规模至少是2台机器,以3台机器组成的服务器集群为例.在服务器集群初始化阶段,当有一台服务器(myid为1,称为Server1)启动的时候,无法完成Leader选举.第二台机器(myid为2,称其为Server2)也启动后,此时这两台机器已经能够进行互相通信,每台机器都试图找到一个Leader

kafka 中 zookeeper 具体是做什么的?

zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容. 而且,这也是面试时经常问的. zookeeper 存储了一些关于 consumer 和 broker 的信息,那么就从这两方面说明 zookeeper 的作用. 1. broker 状态 zookeeper 记录了所有 broker 的存活状态,broker 会向 zookeeper 发送心跳请求来上报自己的状态. zookeeper 维护了一个正

Kafka中bootstrap-server、broker-list和zookeeper的区别

参考 Kafka bootstrap-servers vs zookeeper in kafka-console-consumer 具体分析以后补充 原文地址:https://www.cnblogs.com/tonglin0325/p/8810313.html

Zookeeper 快速理解

转自:http://blog.csdn.net/colorant/article/details/8444283 == 是什么 == 目标Scope(解决什么问题) 为分布式系统提供高可靠性的协同工作机制 官方定义 ZooKeeper is acentralized service for maintaining configuration information, naming,providing distributed synchronization, and providing group

zookeeper leader选举机制

最近看了下zookeeper的源码,先整理下leader选举机制 先看几个关键数据结构和函数 服务可能处于的状态,从名字应该很好理解 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING; } 选票参数,还有Notification,参数也都差不多 static public class ToSend { long leader; //leader id long zxid; //选票的zxid long electio