kafka 分区 leader 选举机制原理

日常问题定位——kafka topic leader none ISR为空 问题描述     某据点演示环境,用代码自动创建topic及kafka-console-consumer.sh手动创建topic,用kafka-topic.sh查看topic详细信息时,leader列显示为none,且SIR列显示为空。如图所示: 解决过程 1、首先想到的是zookeeper /controller目录下是否有值,controller在选举partition leader有重要作... 阅读详情

afka在所有broker中选出一个controller,所有Partition的Leader选举都由controller决定。controller会将Leader的改变直接通过RPC的方式(比Zookeeper Queue的方式更高效)通知需为此作出响应的Broker。同时controller也负责增删Topic以及Replica的重新分配。

当有broker fari over controller的处理过程如下:

1.Controller在Zookeeper注册Watch,一旦有Broker宕机(这是用宕机代表任何让系统认为其die的情景,包括但不限于机器断电,网络不可用,GC导致的Stop The World,进程crash等),其在Zookeeper对应的znode会自动被删除,Zookeeper会fire Controller注册的watch,Controller读取最新的幸存的Broker

2.Controller决定set_p,该集合包含了宕机的所有Broker上的所有Partition

3.对set_p中的每一个Partition

3.1 从/brokers/topics/[topic]/partitions/[partition]/state读取该Partition当前的ISR

3.2 决定该Partition的新Leader。如果当前ISR中有至少一个Replica还幸存,则选择其中一个作为新Leader,新的ISR则包含当前ISR中所有幸存的Replica(选举算法的实现类似于微软的PacificA)。否则选择该Partition中任意一个幸存的Replica作为新的Leader以及ISR(该场景下可能会有潜在的数据丢失)。如果该Partition的所有Replica都宕机了,则将新的Leader设置为-1。

3.3 将新的Leader,ISR和新的leader_epoch及controller_epoch写入/brokers/topics/[topic]/partitions/[partition]/state。注意,该操作只有其version在3.1至3.3的过程中无变化时才会执行,否则跳转到3.1

4. 直接通过RPC向set_p相关的Broker发送LeaderAndISRRequest命令。Controller可以在一个RPC操作中发送多个命令从而提高效率。

 

LeaderAndIsrRequest响应过程

 

1.若请求中controllerEpoch小于当前最新的controllerEpoch,则直接返回ErrorMapping.StaleControllerEpochCode。2.对于请求中partitionStateInfos中的每一个元素,即((topic, partitionId), partitionStateInfo):

2.1 若partitionStateInfo中的leader epoch大于当前ReplicManager中存储的(topic, partitionId)对应的partition的leader epoch,则:

2.1.1 若当前brokerid(或者说replica id)在partitionStateInfo中,则将该partition及partitionStateInfo存入一个名为partitionState的HashMap中

2.1.2否则说明该Broker不在该Partition分配的Replica list中,将该信息记录于log中2.2否则将相应的Error code(ErrorMapping.StaleLeaderEpochCode)存入Response中

3.筛选出partitionState中Leader与当前Broker ID相等的所有记录存入partitionsTobeLeader中,其它记录存入partitionsToBeFollower中。

4.若partitionsTobeLeader不为空,则对其执行makeLeaders方。

5.若partitionsToBeFollower不为空,则对其执行makeFollowers方法

6.若highwatermak线程还未启动,则将其启动,并将hwThreadInitialized设为true。

7.关闭所有Idle状态的Fetcher。

LeaderAndIsrRequest处理过程如下图所示

  对于收到的LeaderAndIsrRequest,Broker主要通过ReplicaManager的becomeLeaderOrFollower处理,流程如下:

 

 

如何处理所有Replica都不工作

 

  上文提到,在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某个Partition的所有Replica都宕机了,就无法保证数据不丢失了。这种情况下有两种可行的方案:

1.等待ISR中的任一个Replica“活”过来,并且选它作为Leader

2.选择第一个“活”过来的Replica(不一定是ISR中的)作为Leader

  这就需要在可用性和一致性当中作出一个简单的折衷。如果一定要等待ISR中的Replica“活”过来,那不可用的时间就可能会相对较长。而且如果ISR中的所有Replica都无法“活”过来了,或者数据都丢失了,这个Partition将永远不可用。选择第一个“活”过来的Replica作为Leader,而这个Replica不是ISR中的Replica,那即使它并不保证已经包含了所有已commit的消息,它也会成为Leader而作为consumer的数据源(前文有说明,所有读写都由Leader完成)。Kafka0.8.*使用了第二种方式。根据Kafka的文档,在以后的版本中,Kafka支持用户通过配置选择这两种方式中的一种,从而根据不同的使用场景选择高可用性还是强一致性。 unclean.leader.election.enable 参数决定使用哪种方案,默认是true,采用第二种方案 

参考:

1. http://www.jasongj.com/2015/04/24/KafkaColumn2/

2. http://www.jasongj.com/2015/06/08/KafkaColumn3/

3. http://orchome.com/22

【Kafka】Kafka Leader:none ISR 为空 消费超时 不消费 20220919日场景再现,事情是这样的我们部署了一套对接华为的环境,然后我们的有个topic是不能消费的,经过一番排查发现这个topic出现了leader =-1 或者 leader=none的情况。这里是flink获取kafka元数据的时候,拿到了元数据的信息,然后红色框选的分区是没有leader 的而且 isr为空,这些是有问题的,而绿色的是正常的。然后我们同步消息发现,第一次排查的时候,也是这个问题,但是我们重建了topic,说实话我想吐槽他们,他们不给我们权限,还自己不会搞topic。 阅读详情

相关推荐

【MIT-BEVFusion代码解读】第四篇:融合特征fuser和解码特征decoder

的大小,实际上源代码也是这么做的。最后将得到两个分支的特征进行。,第一个特征使用卷积降低通道数即可,第二个则需要反卷积来提升。所以backbone只有两个分支,都是5个卷积模块组成。的长和宽都减半至90,然后在经过5个相同的。将通道降至128,后面再接5个相同的。,将通道数128上至256,并且将。特征进行融合,这里使用的。部分由两部分组成,分别是。,这个分支首先经过第一个。,然后再卷积得到 =>提取特征,最后得到特征。得到了两个大小不同的。

非晚非晚的博客 2957

Kafka选举机制解析:控制器与分区Leader选举原理

分布式系统中的选举机制是保障高可用的核心技术,通过协调节点状态实现数据一致性。Kafka作为主流消息队列,其控制器选举和分区Leader选举机制直接影响集群稳定性。控制器作为集群协调者,基于ZooKeeper临时节点实现故障自动转移;分区Leader选举则根据ISR副本状态平衡一致性与可用性。在KRaft新架构中,采用Raft算法实现去中心化元数据管理,选举效率提升至毫秒级。理解这些选举原理,有助于优化Kafka集群配置,解决生产环境中常见的Leader频繁切换、脑裂等问题。

weixin_34195364的博客 411

告别实车测试:手把手教你用Vector VT平台搭建OBC/DCDC的HIL测试台架

本文详细介绍了如何利用Vector VT平台搭建新能源汽车OBC/DCDC的HIL测试台架,涵盖硬件选型、模型部署到自动化测试的全流程。通过HIL仿真测试技术,工程师可以高效验证动力域关键部件,大幅缩短开发周期并降低成本,特别适合新能源汽车三电系统的开发验证。

weixin_42659194的博客 339

kafka中topic的部分分区leader为none,怎样解决?

这两种方式是设置分区的leader,必须重启kafka集群和zookeeper集群,就能解决分区leader为none。以上是通过网上学习和查阅相关资料、以及自己的理解所得出的结果。可能对你没有帮助,但是能提供给你们作为参考,以上如有雷同,请联系!!!

weixin_61959079的博客 2648

NXP S32K3 Safety软件生态全解析:RTD、SPD、SAF、SCST到底怎么选?

本文深入解析NXP S32K3系列MCU的安全软件生态,详细对比RTD、SPD、SAF和SCST四大组件的功能定位与选型策略。针对不同ASIL等级需求,提供从架构设计到工程实践的完整解决方案,帮助开发者高效实现功能安全认证,优化汽车电子系统的安全性与可靠性。

weixin_42524226的博客 323

Allan方差读图分析IMU误差指标

Allan方差标定IMU参数实测分析

weixin_44927558的博客 3566

topic的leader显示为none的解决办法

受此博文启发: http://blog.selfup.cn/1698.html 以单副本,3分区示例: kafka在zk中存放路径为 / (路径自行验证) 1、查看kafka的topic详细信息 2、查看zk节点 指定节点内部为空。 查看其它同级节点发现有分区信息: 3、创建分区信息 进入zookeeper-client: 首先查看节点/controller_epo...

王木头的博客 2万+

Win10或Win8下ObjectARX2015 Wizard向导创建项目失败解决方法

[原创]objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法总结 by edata @2017-5-1 objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法 因为Win8/Win10对系统盘(默认c:)使用了高级权限管理,所以在此盘下操作文件的修改工作都需要管理员权限才行。 基于这个原因,导致非管理员安

edata的博客 7029

kafka leader选举机制原理

kafka在所有broker中选出一个controller,所有Partition的Leader选举都由controller决定。controller会将Leader的改变直接通过RPC的方式(比Zookeeper Queue的方式更高效)通知需为此作出响应的Broker。同时controller也负责增删Topic以及Replica的重新分配。 当有broker fari over contr

RangeYan 5万+

VirtualBox 7.0.8 + Android-x86 9.0 保姆级安装教程(附图形界面卡顿解决方案)

本文提供VirtualBox 7.0.8与Android-x86 9.0的详细安装教程及性能优化方案,帮助开发者解决图形界面卡顿问题。从环境准备到高级配置,涵盖硬件要求、安装步骤、显存优化及ADB调试等实用技巧,显著提升虚拟机流畅度,适用于应用测试和开发调试。

weixin_29224309的博客 524

多智能体强化学习MATD3算法完整复现与分析

多智能体强化学习MATD3算法复现与分析摘要 MATD3算法是多智能体深度强化学习领域的重要进展,通过改进MADDPG算法,引入双Q学习、延迟策略更新和目标策略平滑等技术,显著提升了算法稳定性。本文完整复现了MATD3算法,详细解析了其数学原理,包括部分可观测马尔可夫博弈模型和TD3核心思想。在实现层面,设计了集中式Critic和分布式Actor的神经网络架构,采用PyTorch框架构建了Actor-Critic网络模块,包含精心设计的权重初始化和训练流程。该算法有效解决了多智能体环境中的非平稳性、信用分配

max500600的博客 530

Kafka Partition Leader选举机制原理详解

1 大数据常用的选主机制 Leader选举算法非常多,大数据领域常用的有以下两种: 1.1 Zab(zookeeper使用) Zab协议有四个阶段 Leader election Discovery (E#epoch establish) Synchronization (5X#sync with followers) Broadcast 比如3个节点选举leader:编号为1、2、3。 1先启动,选择自己为leader,然后2启动 首先也选择自己为leader,由于1,2都没过半,选择编号大的为lea

JavaEdge全是干货的技术号 4371

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

kafka:leader选举(broker /分区)

broker的leader: Kafka集群Leader选举原理 我们知道Zookeeper集群中也有选举机制,是通过Paxos算法,通过不同节点向其他节点发送信息来投票选举出leader,但是Kafka的leader的选举就没有这么复杂了。 Kafka的Leader选举是通过在zookeeper上创建/controller临时节点来实现leader选举,并在该节点中写入当前broker的信...

okhymok的博客 3423

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Kafka中的选举有多少?

面试官在考查你Kafka知识的时候很可能会故弄玄虚的问你一下:Kafka中的选举时怎么回事?除非问你具体的哪种选举,否则问这种问题的面试官多半也是对Kafka一知半解,这个时候就是“弄死”他的时候。当然如果你没有一定的知识储备,那么就是你被“弄死”的时候。 一般问这个问题,那么他肯定知道其中的一种,比如分区leader的选举。所谓分区leader的选举就是当ISR中的leader副本歇菜了,再重新选举一个的过程。对于这个问题就是你反客为主的机会,因为Kafka中的选举有多处,可不止分区leader的选举这

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 434

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Kafka 原理深度剖析系列|基本原理与架构

在 0.10 版本之前,Kafka 主要定位是分布式、⾼吞吐、低延迟的消息引擎,平时⼯作中常⽤的消息中间件还有很多,⽐如 RabbitMQ,RocketMQ 等。

Sharon0408的博客 1449

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Kafka知识总结之Broker原理总结

这篇文章介绍Kafka的Broker工作流程,包括其中控制器的选举过程;kafka副本的leader选举以及leader和follower故障流程;简单讲述了生产环境中如何调整分区副本;kafka的文件存储机制以及日志文件的删除策略;最后了解下kafka中使用的页缓冲和零拷贝的原理。

学习和工作总结,共勉! 1万+

Kafka 架构原理解析

通过对 Kafka 架构原理的深入剖析,我们领略了其在分布式存储、高可用设计以及丰富应用场景中的卓越魅力。Kafka 的分区分配策略和基于 LogSegment 的数据存储格式,使其在海量数据存储和高效读写方面表现出色;ISR 副本机制和严谨的 Leader 选举流程,确保了集群在复杂环境下的高可用性和数据一致性;而在日志收集、流量削峰、微服务异步通信和实时数据流处理等核心应用场景中,Kafka 更是成为了不可或缺的关键技术,为企业的数字化转型和业务创新提供了强大的支持。

m0_71836706的博客 1376

Kafka 分区机制详解

由于负责产品的性质原因,我需要大量接触 Kafka,因此对 Kafka 的使用和原理都有一定的了解!主题与分区之间的关系 ✅分区工作的原理流程 ✅如何创建一个多分区的主题 ✅。

jcc4261的博客 487

kafka进阶各种机制的原理

kafka是scala语言开发的,它时运行在jvm虚拟机上的,kafka天生就是集群,单个服务也是集群,横向拓展非常方便,修改少量配置即可。当然kafka依赖zookeeper搭建集群,在zookeeper中kafka创建的目录比较多,挑选几个重要目录分析kafka是如何依赖zookeeper工作的。 kafka中集群总控制器Controller选举 kafka在启动时会向zookeeper发起创建临时节点请求,节点名称为controller,只有第一个到达zookeeper的请求会成功创建contro

weixin_36279234的博客 266

4.2.5 Kafka 分区, 副本机制, 副本Leader选举, 分区重新分配, 自动再均衡, 修改分区副本, 分区分配策略(范围, 轮询, 黏性, 自定义)

4.2.5 Kafka 高级特性-分区

chengh1993的博客 992

kafka之七 分区

分区 副本机制 由于Producer和Consumer都只会和Leader角色的分区副本相连,所以kafka需要以集群的 组织形式提供主题下的消息高可用,kafka支持主备复制,所以消息具备高可用和持久性 一个分区可以有多个副本,保存在不同的broker上,每个分区的副本中都有一个作为leader,当一个broker 失败时,leader在这台broker上的分区都会变得不可用,kafka会自动...

weixin_42672777的博客 210

kafka选举

Kafka 的选举机制是保障其分布式系统高可用性、数据一致性和负载均衡的核心设计,主要涉及三大场景:Controller 选举、分区 Leader 选举和消费者组选举。以下是综合所有场景的详细知识点梳理:Controller 是 Kafka 集群的 “总协调者”,负责管理分区分配、副本同步、Broker 上下线等全局元数据。每个分区有多个副本(Replica),其中仅 Leader 处理读写请求,Follower 同步 Leader 数据。选举确保分区在 Leader 失效后快速恢复服务。触发条件:选举策略

Jun_HNU的博客 1016

浅谈MQ-kafka存储原理

Kafka Broker 存储原理 1.文件的存储结构 1.1 partition分区 为了实现横向扩展,把不同数据存放在不同的Broker上,同时降低单台服务器的访问压力,我们把一个topic中的数据分隔成多个partition。 一个partition中的消息是有序的,顺序写入,但是全局不一定有序。 在服务器上,每个partition都有一个物理目录,topic名字后面的数字标号即代表分区。 1.2 replica副本 为了提高分区的可靠性,kafka又设计了副本机制。 创建topic的时候,通过指定

JC.Lin的博客 670
上一篇: trie 树
下一篇: spring boot : spring.profiles.active来解决多个profile的问题
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值