MQ 学习日志(四) kafka的选举机制

简介: kafka的选举机制 概述
kafka的选举机制

一个Kafka集群中有多个Broker,最开始的时候,这些Broker中的有一个Broker会被选举为控制器(KafKa Controller),他负责管理整个集群中所有的分区和副本的状态,每个Topic的partition的多个Replication中只有一个Replication会被选举为Leader,只有Leader可以进行消息的读写,当某个Partition的leader宕机之后,由Controller发送消息给该Topic的所有Partition来进行选举,推选出来一个Replication作为partition Leader

kafka控制器的选举原理

KafKa控制器的选举依赖于Zookeeper,当一个Broker选举成功之后,会在Zookeeper中创建一个Controller的临时节点,每个Broker会对/Controller节点添加监听器,以便来监听节点的数据变化,当/Controller节点发生变化的时候,就会触发新一轮的选举

在任意时刻,集群中有且只有一个控制器,每个Broker都会在内存中保存当前控制器的brokerId值,这个值表示activeControllerId

启动时选举

集群中第一个启动的Broker会通过在Zookeeper中创建临时节点/controller来让自己成为控制器,其他Broker启动时会尝试读取/controller节点的BrokerId的值,读取到的BrokerId的值不为-1,直到已经有其他的Broker节点成功竞选成为控制器,就会在Zookeeper中创建watch对象,便于他们收到控制器变更的通知

Leader异常选举

如果Broker由于网络原因与Zookeeper断开连接或者异常退出,那么其他的Broker通过watch收到控制器变更的通知,就会去尝试创建临时节点/controller,如果有一个Broker创建成功,那么其他的Broker就会收到创建异常通知,也就意味着集群中已经有了控制器,其他Broker只需要创建watch对象即可

Follower异常

如果集群中有一个Broker发生异常退出了,那么控制器就会检查这个Broker是否有分区的副本Leader,如果有那么个分区就需要一个新的leader,此时控制器就会去便利其他的副本,决定哪一个成为新的leader,同时更新分区的ISR集合

Broker加入

如果一个Broker加入到集群中,那么控制器就会通过brokerId去判断新加入的Broker中是否含有现有分区的副本,如果有,就会从分区副本中去同步数据

Epoch防止脑裂

kafka通过controller_epoch来保证控制器的唯一性,进而保证相关操作的一致性

Controller_epoch是一个整型值,存放再zookeeper的/controller_epoch这个持久节点中

controller_epoch值用于记录控制器发生变更的次数,即记录当前的控制器是第几代控制器

controller_epoch的初始值为1,当控制器发生变更的时候,就将该字段+1

每个和控制器交互的请求都会携带Controller_epoch字段,来标注交互的是几代控制器

如果请求的Controller_epoch值小于内存中的Controller_epoch值,那么就认为这个请求是向已经过期的控制器发送请求,这个请求就会被忽略

如果请求的Controller_epoch的值大于当前内存的controller_epoch值,那么就说明已经有新的控制器当选了

分区Leader的选举

controller感知到分区Leader所在的broker挂了,controller就会从replicas副本列表中取出第一个broker作为leader

消费者Leader的选举

GroupCoordinator需要为消费组内的消费者选举出一个消费租的Leader,这个选举的算法很简单,当消费组内还没有leader,那么第一个加入消费组的消费者就为消费组的leader,如果当前的leader退出消费组,则会挑选以HashMap结构保存的消费者节点数据中,第一个键值对来作为leader

目录
相关文章
|
7月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
491 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
消息中间件 分布式计算 算法
大数据-63 Kafka 高级特性 分区 副本机制 宕机恢复 Leader选举
大数据-63 Kafka 高级特性 分区 副本机制 宕机恢复 Leader选举
259 5
大数据-63 Kafka 高级特性 分区 副本机制 宕机恢复 Leader选举
|
11月前
|
消息中间件 架构师 Java
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
|
调度
FreeRTOS学习日志 - 第一天
这就是我的FreeRTOS学习日志 - 第一天的内容,明天继续探索这片实时操作系统的广阔海洋。+
227 12
|
消息中间件 运维 Java
招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?
45岁资深架构师尼恩针对一线互联网企业面试题,特别是招商银行的高阶Java后端面试题,进行了系统化梳理。本文重点讲解如何根据应用场景选择合适的消息中间件(如RabbitMQ、RocketMQ和Kafka),并对比三者的性能、功能、可靠性和运维复杂度,帮助求职者在面试中充分展示技术实力,实现“offer直提”。此外,尼恩还提供了《尼恩Java面试宝典PDF》等资源,助力求职者提升架构、设计、开发水平,应对高并发、分布式系统的挑战。更多内容及技术圣经系列PDF,请关注【技术自由圈】获取。
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
1457 3
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
消息中间件 存储 监控
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的区别
【10月更文挑战第24天】ActiveMQ、RocketMQ、RabbitMQ 和 Kafka 都有各自的特点和优势,在不同的应用场景中发挥着重要作用。在选择消息队列时,需要根据具体的需求、性能要求、扩展性要求等因素进行综合考虑,选择最适合的消息队列技术。同时,随着技术的不断发展和演进,这些消息队列也在不断地更新和完善,以适应不断变化的应用需求。
1071 1
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
1691 3
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
465 4
下一篇
开通oss服务