Kafka的leader选举
实际上,leader选举的算法非常多,比如Zookeeper的Zab、Raft以及Viewstamped Replication。而Kafka所使用的leader选举算法更像是微软的PacificA算法。
Kafka在Zookeeper中为每一个partition动态的维护了一个ISR,这个ISR里的所有replica都跟上了leader,只有ISR里的成员才能有被选为leader的可能(unclean.leader.election.enable=false)。在这种模式下,对于f+1个副本,一个Kafka topic能在保证不丢失已经commit消息的前提下容忍f个副本的失败,在大多数使用场景下,这种模式是十分有利的。事实上,为了容忍f个副本的失败,“少数服从多数”的方式和ISR在commit前需要等待的副本的数量是一样的,但是ISR需要的总的副本的个数几乎是“少数服从多数”的方式的一半。
上文提到,在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某一个partition的所有replica都挂了,就无法保证数据不丢失了。这种情况下有两种可行的方案:
- 等待ISR中任意一个replica“活”过来,并且选它作为leader
- 选择第一个“活”过来的replica(并不一定是在ISR中)作为leader
如果一定要等待ISR中的replica“活”过来,那不可用的时间就可能会相对较长。而且如果ISR中所有的replica都无法“活”过来了,或者数据丢失了,这个partition将永远不可用。选择第一个“活”过来的replica作为leader,而这个replica不是ISR中的replica,那即使它并不保障已经包含了所有已commit的消息,它也会成为leader而作为consumer的数据源。默认情况下,Kafka采用第二种策略,即unclean.leader.election.enable=true
,也可以将此参数设置为false来启用第一种策略。
unclean.leader.election.enable这个参数对于leader的选举、系统的可用性以及数据的可靠性都有至关重要的影响。下面我们来分析下几种典型的场景。
如果上图所示,假设某个partition中的副本数为3,replica-0, replica-1, replica-2分别存放在broker0, broker1和broker2中。AR=(0,1,2),ISR=(0,1)。
设置request.required.acks=-1, min.insync.replicas=2,unclean.leader.election.enable=false。这里讲broker0中的副本也称之为broker0起初broker0为leader,broker1为follower。
1. 当ISR中的replica-0出现crash的情况时,broker1选举为新的leader[ISR=(1)]
因为受min.insync.replicas=2影响,write不能服务,但是read能继续正常服务。此种情况恢复方案:
- 尝试恢复(重启)replica-0,如果能起来,系统正常;
- 如果replica-0不能恢复,需要将min.insync.replicas设置为1,恢复write功能。
2. 当ISR中的replica-0出现crash,紧接着replica-1也出现了crash, 此时[ISR=(1),leader=-1]
不能对外提供服务,此种情况恢复方案:
- 尝试恢复replica-0和replica-1,如果都能起来,则系统恢复正常;
- 如果replica-0起来,而replica-1不能起来,这时候仍然不能选出leader,因为当设置unclean.leader.election.enable=false时,leader只能从ISR中选举,当ISR中所有副本都失效之后,需要ISR中最后失效的那个副本能恢复之后才能选举leader, 即replica-0先失效,replica-1后失效,需要replica-1恢复后才能选举leader。保守的方案建议把unclean.leader.election.enable设置为true,但是这样会有丢失数据的情况发生,这样可以恢复read服务。同样需要将min.insync.replicas设置为1,恢复write功能;
- replica-1恢复,replica-0不能恢复,这个情况上面遇到过,read服务可用,需要将min.insync.replicas设置为1,恢复write功能;
- replica-0和replica-1都不能恢复,这种情况可以参考情形2.
3. 当ISR中的replica-0, replica-1同时宕机,此时[ISR=(0,1)]
不能对外提供服务,此种情况恢复方案:尝试恢复replica-0和replica-1,当其中任意一个副本恢复正常时,对外可以提供read服务。直到2个副本恢复正常,write功能才能恢复,或者将将min.insync.replicas设置为1。
原文连接:https://www.cnblogs.com/aidodoo/p/8888628.html
Kafka的leader选举相关推荐
- Kafka Partition Leader选举机制原理详解
1 大数据常用的选主机制 Leader选举算法非常多,大数据领域常用的有以下两种: 1.1 Zab(zookeeper使用) Zab协议有四个阶段 Leader election Discovery ...
- Kafka 副本leader选举
谁来实施 分区leader副本的选举由Kafka Controller 负责具体实施. 选举时间 leader挂掉时 broker挂掉时,然后broker上可能有某些leader 选举资格 Kafka ...
- 【大数据哔哔集20210124】有人问我Kafka Leader选举?我真没慌
一条消息只有被ISR中所有Follower都从Leader复制过去才会被认为已提交.这样就避免了部分数据被写进了Leader,还没来得及被任何Follower复制就宕机了,而造成数据丢失.而对于Pro ...
- Kafka系列之:深入理解Kafka 主题、分区、副本、LEO、ISR、HW、Kafka的主写主读和分区leader选举
Kafka系列之:深入理解Kafka 主题.分区.副本.LEO.ISR.HW.Kafka的主写主读和分区leader选举 一.Kafka重要知识点提炼 二.详细介绍Kafka 主题.分区.副本.LEO ...
- kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?
leader和follower 在Kafka中,每个topic都可以配置多个分区以及多个副本.每个分区都有一个leader以及0个或者多个follower,在创建topic时,Kafka会将每个分区的 ...
- kafka leader选举过程
前言 通过之前的篇章,我们了解到kafka集群中存在一个leader,这个leader目前来说,通常是谁先注册到zk中,即在broker的ids节点中的第一位,就是leader 但是在某些情况下,比如 ...
- 副本的leader选举
Kafka提供了数据复制算法保证,如果leader副本所在的broker节点宕机或者出现故障,或者分区的leader节点发生故障,这个时候怎么处理呢? 那么,kafka必须要保证从follower副本 ...
- Kafka科普系列 | 原来Kafka中的选举有这么多?
欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-selection/ 面试官在考查你Kafka知识的时候很可能会故弄玄虚的问 ...
- Kafka-之控制器(Controller选举、leader选举)
Kafka-之控制器(控制器选举,leader选举) 1 控制器是什么,如何选举 kafka控制器管理着整个集群中分区以及副本的状态,控制器的选举需要依赖于Zookeeper,在kafka集群启动的时 ...
最新文章
- Android之设置资源图片为圆角图片
- 实现java多线程的3种方式,99%人没用过第3种
- html树形多选下拉列表,EasyUI 多行树形下拉框(Multiple ComboTree)_Vue EasyUI Demo
- 苹果公司推出新款iMac产品
- FFmpegh.264解码
- Jar包部署-指定jsp打包配置
- 详细解读CSS优先级——Web前端系列学习笔记
- [mybatis]缓存_二级缓存使用细节
- [jQuery] Zepto的点透问题如何解决?
- 超过1.2W星的「机器学习路线图」,你的收藏夹可以更新了!
- android Notification 的使用
- 换SSD硬盘,重装系统,一阵子忙乱
- PHP微信公众号支付弹出“NaN:undefined”解决方法
- C/C++程序员面试宝典-2
- Eclipse下载及汉化(官方最新)
- 数据抽取的常见理论方法
- Z-TEKCE COM控制线驱动
- Vue中如何解决跨域问题
- 计算机app无法删除,文件夹删不掉怎么办?
- 身份证实名认证接口,实名认证API接口文档