Kafka的ISR机制和像Raft这样的传统基于Quorum(法定人数)的协议之间的区别确实很微妙,但也非常重要。让我们来分析一下为什么ISR可以减少所需的副本数量。

在采用ISR模型和(f+1)个副本数的配置下,一个Kafka分区能够容忍最大f个节点失败,相比于“少数服从多数”的方式所需的节点数大幅减少。实际上,为了能够容忍f个节点失败,“少数服从多数”的方式和ISR的方式都需要相同数量副本的确认信息才能提交消息。

比如,为了容忍1个节点失败,“少数服从多数”需要3个副本和1个follower的确认信息,采用ISR的方式需要2个副本和1个follower的确认信息。在需要相同确认信息数的情况下,采用ISR的方式所需要的副本总数变少,复制带来的集群开销也就更低,“少数服从多数”的优势在于它可以绕开最慢副本的确认信息,降低提交的延迟,而对Kafka而言,这种能力可以交由客户端自己去选择。

问题是:为什么它们有这么大的区别,ISR是如何实现副本数量减少的?

根本区别在于当旧的leader失效后,如何选择新的leader

“多数投票”系统(如 Raft)

在像Raft这样的系统中,领导者选举是一个在所有副本节点之间进行的去中心化、对称的过程

  1. 固定的Quorum:为了容忍 f 个故障,必须有 2f+1 个副本。这个数字是数学上必需的。
  2. 写入Quorum:一个写操作只有在被复制到大多数节点(f+1)后才被认为是“已提交”的。
  3. 选举Quorum:新领导者只有在获得大多数节点(f+1)的投票后才能当选。

2f+1 规则的奥妙在于,任何两个多数派(Quorum)都保证会重叠。这意味着,在选举新领导者时,投票给它的节点集合中必须包含至少一个接收了最后一次已提交写入的节点。这个重叠的成员确保了过时的副本不能被选为领导者,从而防止数据丢失。领导者是谁的共识是在每次选举期间由副本自己达成的。

Kafka的ISR(In-Sync Replica)模型

在Kafka中,领导者选举是一个由一个特殊节点——Controller(控制器)——管理的中心化、非对称的过程

  1. 动态的“Quorum”(即ISR):Kafka不使用固定的多数派,而是使用一个动态的、与领导者完全同步的副本集合。这就是同步副本集(In-Sync Replica, ISR)。
  2. 更严格的写入条件:一个写操作只有在被复制到当前ISR中的所有副本后,才被认为是“已提交”的(即高水位线可以推进)。
  3. 中心化任命:当领导者失败时,副本们不进行投票。监控所有Broker健康状况的Controller会注意到这个故障。然后,它会查看该分区的最新已知ISR,并任命其中一个幸存的副本作为新的领导者。

正如在文档中看到的那样:

design.html:496-498

// ... existing code ...It is also important to optimize the leadership election process as that is the critical window of unavailability. A naive implementation of leader election would end up running an election per partition for allpartitions a node hosted when that node failed. As discussed above in the section on <a href="#replication">replication</a>, Kafka clusters have a special role known as the "controller" which isresponsible for managing the registration of brokers. If the controller detects the failure of a broker, it is responsible for electing one of the remaining members of the ISR to serve as the new leader.
// ... existing code ...

为什么这能减少副本数量

Kafka的ISR模型通过改变问题的方式,有效地“取巧”了。它将达成共识的工作从单个分区转移到了中心化的Controller上。

  • Raft 需要 2f+1 个副本,因为每个分区都必须能够依靠重叠Quorum的数学保证,安全地自行选举出新的领导者。
  • Kafka 的一个分区只需要 f+1 个副本,因为分区副本本身不做出领导决策。它们相信Controller会任命一个新的领导者。由于ISR中的任何副本都保证拥有所有已提交的数据(得益于严格的写入条件),所以Controller的选择总是安全的。

这将容错的负担转移了。数据分区可以用 f+1 个副本容忍 f 个故障,但现在Controller本身必须是容错的

这就引出了Raft在现代Kafka中的作用:

  • 在 KRaft(Kafka Raft Metadata)模式下,Controller们自己组成一个Quorum,并使用Raft协议就集群元数据——包括每个分区的ISR成员——达成一致。

所以,总结一下:

  1. Raft:在每个分区的 2f+1 个对等节点之间进行去中心化选举。
  2. Kafka的数据分区:使用由Controller进行的中心化领导者任命,这使得它们只需要 f+1 个副本即可运行。
  3. Kafka的Controller(在KRaft模式下):它们之间使用Raft来确保其管理的元数据(如ISR列表)的可靠性和一致性。

通过将元数据的共识与数据复制路径分离开来,Kafka优化了常见场景(数据复制),使其在副本数量、磁盘空间和网络流量方面更加高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92037.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92037.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92037.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手向:GitCode疑难问题诊疗

Git疑难问题诊疗引言在软件开发过程中&#xff0c;版本控制系统&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;而Git以其分布式架构、强大的分支管理能力和高效的性能成为行业标准。然而&#xff0c;随着项目复杂度的提升&#xff0c;Git的使用也可能遇到各种疑难问…

电子电气架构 ---如何焕新升级为 48V 电气架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

JavaScript判断数字方法

在JavaScript中&#xff0c;判断一个值是否为数字有多种场景&#xff0c;以下是常见方法及适用情况&#xff1a;1. 严格判断数字类型&#xff08;排除NaN&#xff09;使用 typeof 结合 !isNaN()&#xff0c;确保值是 number 类型且非 NaN&#xff1a;javascriptfunction isNumb…

C++编程之旅-- -- --始探门庭的求知漫溯(二)

目录引用内联函数(C11)auto关键字基于范围的for循环指针空值---nullptr引用 引用&#xff1a;指将变量以另一个名称来展现的。它并非是一个新变量而是一个别名&#xff0c;它们同指一块内存空间。就如古时那些有字的人,亦或者是周树人&#xff0c;你说鲁迅是不是周树人呢&…

wordpress网站的“管理员邮箱地址”有什么用?

在WordPress网站的“设置”-“常规”中设置的“管理员邮箱地址”有多种用途&#xff0c;以下是详细介绍&#xff1a; 一、用户注册相关 密码找回功能 当网站用户忘记密码时&#xff0c;他们会通过点击登录页面上的“忘记密码”链接来重置密码。WordPress系统会向管理员邮箱地…

202506 电子学会青少年等级考试机器人六级实际操作真题

更多内容和历年真题请查看网站&#xff1a;【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 六级】 网站链接 青少年软件编程历年真题模拟题实时更新 202506 青少年等级考试机器人实操真题六级 一、实际操作 1. 主题&#xff1a;姿态传感器交互步进电机左右…

Centos 安装 redis

1.下载redis&#xff0c;这个自己去网上找吧。2.上传文件&#xff0c;redis-7.4.1.tar.gz3.解压&#xff1a;执行 tar -xf redis-7.4.1.tar.gz在进行安装之前&#xff0c;检查一下有没有make、gcc、python3、没有的话全部 yum install。安装完之后&#xff0c;如果报一下错误&a…

算法训练营DAY55 第十一章:图论part05

并查集理论基础 背景 当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 原理讲解 从代码层面&#xff0c;我们如何将两个元素添加到同一个…

docker相关操作记录

1.docker清理服务器上面没有用到的镜像#删除本地镜像 docker rmi $(docker images -q) #强制删除本地镜像 docker rmi $(docker images -q) -f2.docker查看日志docker logs c36c56e4cfa3 (容器id)3.所有运行或没有运行的镜像 docker ps -a4、停止container&#xff0c;这样才…

LInux基础学习笔记七

/dev/zero和/dev/null 是什么/dev/zero&#xff1a;一个零设备文件&#xff0c;读取时会不断返回\0字节&#xff08;零值字节&#xff09;&#xff0c;常用于创建空文件或格式化/dev/null&#xff1a;一个空设备文件&#xff0c;写入它的内容会被丢弃&#xff0c;相当于“黑洞”…

软件架构:系统结构的顶层设计与战略约束

软件架构&#xff1a;系统结构的顶层设计与战略约束软件架构是软件系统的“骨架”与“宪法”&#xff0c;它定义了系统的根本性组织结构&#xff0c;包括构成系统的关键构件、它们之间的组织关系、交互机制、约束原则以及指导性决策。它决定了系统在性能、可扩展性、可靠性、可…

基于spring boot的个人博客系统

2 开发技术 3 2.1 VUE框架 3 2.2 Mysql数据库 3 2.3 Spring Boot框架 3 2.4 layui介绍 4 本程序在设计结构选择上首选B/S&#xff0c;也是为了满足程序今后升级便利&#xff0c;以及程序低维护成本的要求。本程序的网络拓扑设计也会在下图展示&#xff0c;通过图形的方式来描述…

Excel制作尖刀图,直观展示业绩涨跌

Excel制作尖刀图&#xff0c;直观展示业绩涨跌效果展示下图是一个常见的两年业绩同比表&#xff0c;也是尖刀图很常见的数据源类型&#xff0c;但是这个数据格式是无法直接制作的&#xff0c;需要对数据进行加工。1.对数据进行逆透视使用excel进行逆透视&#xff0c;最常见的方…

两种路由模式(React-Router 8)

俩种路由模式 各个主流框架的路由常用的路由模式有俩种&#xff0c;history模式和hash模式,ReactRouter分别由createBrowerRouter和createHashRouter函数负责创建附带代码:import Login from "../page/Login"; import Article from "../page/Article"; imp…

【01】OpenCV C++实战篇——基于多项式插值的亚像素边缘定位算法

文章目录一. 背景二. 你的经历三. 代码实现(龟速版——单线程)3.1 梯度幅值3.1.1 生成 8 个方向模板3.1.2 计算梯度3.1.3 显示梯度图像3.1.4 程序运行演示3.2 梯度方向 &#xff08;梯度最大幅度值和方向&#xff09;3.3 单像素边缘3.4 梯度单像素边缘提取 运行测试四 、亚像素…

400V降24V,200mA,应用领域:从生活到工业的 “全能电源管家”WD5208

WD5208 电源芯片&#xff1a;小身材蕴藏大能量的电源控制新星在电源芯片的技术星河中&#xff0c;WD5208 凭借独特性能与广泛适用性崭露头角&#xff0c;成为众多电子设备电源方案的优选。本文将全面解析这款芯片的核心优势、应用场景与技术细节&#xff0c;展现其 “小身材&am…

C++ 引用 和 指针 的区别

特性引用指针初始化不能为 null&#xff0c;必须绑定到有效的对象可以为 null&#xff0c;不指向任何对象重新绑定不能重新绑定&#xff0c;一旦初始化后始终引用同一个对象可以重新指向其他对象内存占用不占用额外内存&#xff0c;编译器通常将其优化为所引用的对象占用额外内…

Claude Code实战体验:AI智能编程助手如何重塑开发工作流?

一、背景介绍 AI大模型的爆发&#xff0c;让各种智能编码工具如雨后春笋般涌现。Claude Code就是其中非常有代表性的一款——它不仅能补全代码、查找Bug&#xff0c;还能理解复杂需求&#xff0c;甚至帮你写文档、生成测试用例。作为一名全栈开发者&#xff0c;我和团队最近几个…

centos7 个人网站搭建之gitlab私有化部署实现线上发布

文章目录 效果展示架构设计申请免费阿里云服务器尝试连接远程服务 开放端口申请域名 绑定云服务器组网网关服务器配置转发代理网关服务器配置ssl 证书问题排查证书申请时报错&#xff1a;Set the \server_name\ directive ti use the Nginx installer. gitlab私有化部署搭建git…

小米4A千兆版路由器刷机,解决Telnet无法连接问题

刷机极容易变砖&#xff0c;建议完全理清步骤后再进行操作 工具准备 1、小米4A千兆版路由器&#xff08;注意一定是千兆版&#xff0c;只是4A无千兆按下列步骤会变砖&#xff09;&#xff0c;适配电源线 2、网线一根 3、需保证刷机过程中网线接入是有网的&#xff0c;无需账号认…