kafka学习笔记(一)--脑裂

我知道你想裂,但你先别裂

脑裂

用集群部署的大多数的分布式系统无可避免会面临脑裂问题。简单来说,脑裂就是在同一时刻出现了两个“Leader(或叫Master)”。设想这样一个场景:某分布式系统的分别部署在A,B两机房,每个机房有若干个节点。在正常情况下,这个分布式系统通过一致性协议(如 Paxos 或 Raft)来选举出一个 Leader,所有的读写请求都会通过 Leader 进行处理,副本们同Leader保持一致,确保数据的一致性。

假设一天出现了某种故障,A 机房和 B 机房之间的通信中断,且Leader丢失。这时,A 机房和 B 机房的节点可能会各自进行Leader选举,导致出现两个 Leader。这就是脑裂现象。

此时,如果多个不同区域的客户端向系统发送请求,根据就近路由的原则,用户可能向A机房的 leader 发送写请求,也可能向 B 机房的 leader 发送写请求,那么这两个请求可能会导致系统状态不一致。

为了解决脑裂问题,分布式系统通常会采取以下策略:

引入协调服务:使用 zooKeeper 作为第三方协调服务来管理 Leader 选举和节点状态。

采用一致性算法:通过使用 Paxos、Raft 等一致性算法,系统可以在网络分区发生时,保证只有一个 Leader 被选举出来。这些算法通常要求选举过程中获得超过半数节点的支持,以确保 Leader 的唯一性。

降低系统可用性:根据 CAP (Consistency,Availability,Partition tolerance)定理,在保证分区容错性的前提下,分布式系统必须在一致性和可用性之间做出选择。为了避免脑裂问题,系统可以牺牲部分可用性,例如拒绝处理写请求。

使用租约机制:分布式系统中的 Leader 可以通过租约(Lease)机制来确保其地位。Leader 需要在租约期限内,定期向其他节点发送心跳消息。如果租约到期,Leader 未能及时更新租约,那么其他节点会发起新一轮的选举。这样,即使出现脑裂现象,只要租约期限设置得当,系统也能在一定程度上保持一致性。

Kafka如何防止脑裂-Leader Epoch

为了解决脑裂kafka从0.11.0.0开始引入Leader Epoch的概念。
epoch是一个递增的整数。每当一个当新的leader被选举出来时,epoch都会+1。kafka的所有副本都会维护一个leader-epoch-checkpoint的文件,当eppch发生更新时,kafka会将矢量<LeaderEpoch => StartOffset> 追加到这个文件中,其中StartOffset表示当前的epoch下写入第一条消息的偏移量。副本在同步数据时,会将自己最新的epoch值一同发送给leader。leader收到follower的请求后,会检查请求中的epoch值。如果请求中的epoch值与当前leader的epoch值一致,说明follower与leader之间的同步关系符合预期,leader会接受follower的请求,将自己的数据复制给follower。如果请求中的epoch值小于当前leader的epoch值,说明follower已经过时,leader会拒绝follower的请求,并更新follower的epoch值。

# 查看leader-epoch-checkpoint
# broker ip
tail -f /kafka-logs/your—topic-partition/leader-epoch-checkpoint
0
1

此外,在查看leader-epoch-checkpoint的时候可能会注意到replication-offset-checkpoint 文件。这个文件记录了follower副本已经成功同步的各个主题分区的Offset信息。当follower副本重新启动或发生故障恢复时,会根据这个文件从正确的位置继续同步数据。
leader-epoch-checkpoint和replication-offset-checkpoint文件在Kafka中分别负责管理leader副本和follower副本的状态信息。它们之间的关系在于它们共同参与了Kafka副本同步和故障恢复的过程,确保了Kafka集群在面临故障时能够正确地恢复状态,保证数据的一致性和可靠性。

epoch的局限性

Kafka利用epoch机制确保了在leader发生变更时,follower副本能够及时更新自己的状态,避免了脑裂问题。在leader切换的过程中,可能会出现数据不一致的情况,这种方法在某种程度上牺牲了一致性。

如何将不一致性带来的损失降到最低? 用ISR

ISR列表

ISR(In-Sync Replicas)列表包含了分区的leader副本和已经成功同步了leader副本数据的follower副本。当选举发生时,新的leader会从ISR列表中选举出来,这样可以确保新的Leader副本拥有最新的数据,从而保证数据的一致性。

当Leader接收到客户端的写入请求后,它会将数据写入本地日志,并将数据发送给所有的Follower副本。当follower副本成功写入数据后,它会向Leader发送ACK确认。当leader收到ISR列表中的所有follower副本的ack后,它会认为写入操作成功完成,并向客户端返回成功响应。

当某个副本无法及时同步leader的数据时,它会被从ISR列表中移除,以确保ISR列表中的副本始终具有最新的数据。当该副本恢复正常并成功同步了Leader的数据后,再将它重新加入到ISR列表中。

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

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

相关文章

BeanUtil的正确使用方式

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 在实际的开发中&#xff0c;我们常常会用到工具类去拷贝对象的属性&#xff0c;将一个对象的属性转换成另外一个…

球面的表面积

此推导需要用到重积分的知识&#xff0c;另外关于曲面的面积公式可以看我之前的博客

百度AI布局:从财报看百度的核心竞争力和未来发展方向

百度是中国最大的搜索引擎&#xff0c;也是全球领先的人工智能&#xff08;AI&#xff09;公司。百度在2023年第三季度业绩中&#xff0c;展示了其在AI领域的强劲表现和广阔前景。 百度财报透露了关于AI业务的哪些重要信息&#xff1f; 百度在2023年第三季度的财报中&#xf…

机器学习:攻击方法FGSM系列

任务 FGSM I-FGSM MI-FGSM Ensemble Attack 攻击评价指标 准确率越低表明攻击越好 数据 预训练模型 BaseLine 实践

***Linux常用命令及解释

1、查看Linux的版本信息 1.1、uname -a 1.2、cat /etc/issue 1.3、cat /proc/version 1.4、hostnamectl 通过使用hostnamectl命令&#xff0c;可以查询和更改系统主机名&#xff0c;并且还可以查看Linux的发行版和内核版本。 2、删除文件 3、修改目录权限 4、解压文件 5、…

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…

目标检测YOLO实战应用案例100讲-基于多光谱图像融合的光伏组件故障 检测(续)

目录 3.4 基于改进RIFT的光伏多光谱图像配准 3.4.1 Harris角特征点检测算法

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式&#xff1f;构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念&#xff0c;可以用不同的方式来实现。…

android系统新特性——用户界面以及系统界面改进

用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言&#xff0c;它是一套完整的设计系统&#xff0c;包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述&#xff0c;让开发者设计出更符合目标的软件&#xff0c…

vue3+elementPlus之侧边菜单栏功能

选择默认的颜色&#xff0c;将代码拷贝至<el-aside>模块中 稍微把不需要的修改一下。 <template><div class"common-layout"><el-container><el-header class"homeHeader"><div class"headerTitle">Devops…

vue怎么实现国际化? vue-i18n 插件实现国际化,支持切换不同语言

依赖的文档开始 | Vue I18n 一、安装 npm install vue-i18n 如果在一个模块系统中使用它&#xff0c;你必须通过 Vue.use() 明确地安装 vue-i18n&#xff1a; import Vue from vue import VueI18n from vue-i18nVue.use(VueI18n)二、使用 在 src 下创建 lang 文件夹 1.准…

MYSQL 处理重复数据

文章目录 前言防止表中出现重复数据统计重复数据过滤重复数据删除重复数据在这里插入代码片后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正…

实现【Linux--NTP 时间同步服务搭建】

实现【Linux--NTP 时间同步服务搭建】 &#x1f53b; 前言&#x1f53b; 一、NTP 校时&#x1f530; 1.1 NTP 服务校时与 ntpdate 校时的区别&#x1f530; 1.2 NTP 校时服务搭建&#x1f530; 1.2.1 确认 ntp 的安装&#x1f530; 1.2.2 配置 ntp 服务&#x1f530; 1.2.3 启动…

大数据面试大厂真题【附答案详细解析】

1.Java基础篇&#xff08;阿里、蚂蚁、字节、携程、快手、杭州银行等&#xff09; 问题&#xff1a;HashMap的底层实现原理 答案&#xff1a; 在jdk1.8之前&#xff0c;hashmap由 数组-链表数据结构组成&#xff0c;在jdk1.8之后hashmap由 数组-链表-红黑树数据结构组成&…

openpnp - 给底部相机加防尘罩

文章目录 openpnp - 给底部相机加防尘罩概述笔记END openpnp - 给底部相机加防尘罩 概述 设备标定完, 看着底部相机, 有点担心掉进去东西, 万一从吸嘴掉下去的料(或者清理设备台面时, 不小心掉进去东西)将顶部相机搞短路怎么办. 就想加个防尘罩, 如果有东西掉进去, 可以掉到机…

makefile 学习(5)完整的makefile模板

参考自&#xff1a; (1&#xff09;深度学习部署笔记(二): g, makefile语法&#xff0c;makefile自己的CUDA编程模板(2&#xff09;https://zhuanlan.zhihu.com/p/396448133(3) 一个挺好的工程模板&#xff0c;(https://github.com/shouxieai/cpp-proj-template) 1. c 编译流…

开源vs闭源,处在大模型洪流中,向何处去?

文章目录 一、开源和闭源的优劣势比较1.1 开源优势1.2 闭源的优势 二、开源和闭源对大模型技术发展的影响2.1 数据共享2.2 算法创新2.3 业务拓展2.4 安全性和隐私2.5 社会责任和伦理 三、开源与闭源的商业模式比较3.1 盈利模式3.2 市场竞争3.3 用户生态3.4 创新速度 四&#xf…

shiro的前后端分离模式

shiro的前后端分离模式 前言&#xff1a;在上一篇《shiro的简单认证和授权》中介绍了shiro的搭建&#xff0c;默认情况下&#xff0c;shiro是通过设置cookie&#xff0c;使前端请求带有“JSESSION”cookie&#xff0c;后端通过获取该cookie判断用户是否登录以及授权。但是在前…

二十三种设计模式全面解析-深入探究备忘录模式:保留过去,预见未来

在软件开发中&#xff0c;我们经常需要处理对象状态的保存和恢复问题。备忘录模式&#xff08;Memento Pattern&#xff09;提供了一种优雅的解决方案&#xff0c;能够在不破坏封装性的情况下&#xff0c;捕获和恢复对象的内部状态。本文将深入探讨备忘录模式的技术细节&#x…

【git error|SourceTree】error: bad signature 0x00000000 fatal: index file corrupt

报错 error: bad signature 0x00000000 fatal: index file corrupt 场景 在使用git add . 提交代码到缓冲区时或使用SourceTree时电脑宕机&#xff0c;重启后再次提交代码会出现该提示 原因分析 .git目录下的index文件损坏 解决方式 //删除索引文件 rm -f .git/index //回…