Kafka - 3.x 副本不完全指北
文章目录
- kafka 副本的基本信息
- Leader选举过程
- Kafka Controller
- kafka 分区副本Leader的选举流程
- 实际演示
- ① 查看first的详细信息,注意观察副本分布情况
- ② 停掉hadoop103上的kafka进程
- ③ 再次查看first的相信信息,观察副本分布
- ④ 处理分区leader分布不均匀问题
- leader和 follower故障处理细节
- follower故障处理细节(被踢-重连-追上Hw-连接成功)
- leader故障处理细节(从ISR队列选取ar中靠前的节点选为leader,新leader短则follower“剪”,反之则向leader同步)

kafka 副本的基本信息
参数名称 | 描述 |
---|---|
kafka副本作用 | 提高数据可靠性 |
kafka副本个数 | 默认1个,生产环境中一般配置为2个,保证数据可靠性;但是过多的副本会增加磁盘存储空间、增加网络数据传输、降低kafka效率。 |
kafka副本角色 | 副本角色分为Leader和Follower。kafka生产者只会把数据发送到Leader,follower会主动从Leader上同步数据。 |
kafka中的AR | 是所有副本的统称(Assigned Repllicas),AR = ISR + OSR |
ISR | 表示和Leader保持同步(默认30s)的follower集合。 |
OSR | 表示Follower与Leader副本同步时,延迟过多的副本。 |
Leader选举过程
Kafka Controller
kafka集群中有一个broker的Controller会被选举为Controller Leader,负责管理集群broker的上下线、所有的topic的分区副本分配和Leader选举等工作。
Controller的信息同步工作是依赖于Zookeeper的。
kafka 分区副本Leader的选举流程
Kafka是一个分布式消息系统,具有分区和副本的概念,以确保高可用性和容错性。在Kafka中,每个分区都有一个领导者(Leader)和零个或多个副本(Replicas)。当分区的领导者(Leader)失败时,会触发新的领导者选举过程,确保分区的可用性。
以下是Kafka分区领导者选举的一般流程:
-
原始领导者故障:当Kafka集群中分区的当前领导者故障,或者由于某种原因无法提供服务时,领导者选举会被触发。
-
副本提名:每个分区的副本都有可能成为新的领导者。首先,副本需要“提名”自己作为新的领导者。这个提名会通过ZooKeeper或最新的KRaft元数据管理器(在Kafka 2.8.0及更高版本中引入)来完成。
-
提名标准:副本提名自己的标准通常包括以下因素:
- 副本是否具备最新的数据(即最高的日志段offset)。
- 副本的健康状态,例如是否在线、可用性等。
- 副本的副本同步延迟。
-
提名协调:Kafka通过ZooKeeper或KRaft元数据管理器来协调各个副本的提名过程。这些管理器会比较各个提名并选择一个新的领导者。
-
提名通知:一旦新的领导者被选出,Kafka会通知所有副本,将新领导者的ID分发给它们。
-
新领导者选举完成:一旦新领导者被选出并通知其他副本,分区将有一个新的领导者。客户端请求将路由到新领导者,确保消息的读写操作可以继续。
需要注意的是,Kafka的分区领导者选举是一种自愿的过程,只有当当前领导者无法提供服务时,才会触发这一过程。这有助于确保Kafka的高可用性和容错性,因为在任何时刻都有多个副本可用以提供数据服务。
实际演示
① 查看first的详细信息,注意观察副本分布情况
[xxx@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first
Topic: first TopicId: aUFTM5wES7eSBiuSKT0UpA PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824Topic: first Partition: 0 Leader: 102 Replicas: 102,104,103 Isr: 102,104,103Topic: first Partition: 1 Leader: 103 Replicas: 103,102,104 Isr: 103,102,104Topic: first Partition: 2 Leader: 104 Replicas: 104,103,102 Isr: 104,103,102
② 停掉hadoop103上的kafka进程
[xxx@hadoop103 kafka]$ bin/kafka-server-stop.sh
③ 再次查看first的相信信息,观察副本分布
[xxx@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first
Topic: first TopicId: aUFTM5wES7eSBiuSKT0UpA PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824Topic: first Partition: 0 Leader: 102 Replicas: 102,104,103 Isr: 102,104Topic: first Partition: 1 Leader: 102 Replicas: 103,102,104 Isr: 102,104Topic: first Partition: 2 Leader: 104 Replicas: 104,103,102 Isr: 104,102
④ 处理分区leader分布不均匀问题
[xxx@hadoop102 kafka]$ bin/kafka-leader-election.sh --bootstrap-server hadoop102:9092 --topic first --election-type preferred --partition 0
[xxx@hadoop102 kafka]$ bin/kafka-leader-election.sh --bootstrap-server hadoop102:9092 --topic first --election-type preferred --partition 1
[xxx@hadoop102 kafka]$ bin/kafka-leader-election.sh --bootstrap-server hadoop102:9092 --topic first --election-type preferred --partition 2
[xxx@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first
Topic: first TopicId: aUFTM5wES7eSBiuSKT0UpA PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824Topic: first Partition: 0 Leader: 102 Replicas: 102,104,103 Isr: 102,104,103Topic: first Partition: 1 Leader: 103 Replicas: 103,102,104 Isr: 102,104,103Topic: first Partition: 2 Leader: 104 Replicas: 104,103,102 Isr: 104,102,103
leader和 follower故障处理细节
follower故障处理细节(被踢-重连-追上Hw-连接成功)
follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉(HW之前每个节点都有,故安全),从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了
leader故障处理细节(从ISR队列选取ar中靠前的节点选为leader,新leader短则follower“剪”,反之则向leader同步)
eader发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。
注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。
相关文章:

Kafka - 3.x 副本不完全指北
文章目录 kafka 副本的基本信息Leader选举过程Kafka Controllerkafka 分区副本Leader的选举流程实际演示① 查看first的详细信息,注意观察副本分布情况② 停掉hadoop103上的kafka进程③ 再次查看first的相信信息,观察副本分布④ 处理分区leader分布不均匀…...

二分归并法将两个数组合并
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> main() {int a[5] {1,3,4,5,6};int b[4] {2,7,8,9};int c[9];int m0, n0,k0;while (m < 5 && n < 4){if (a[m] < b[n]){c[k] a[m];//谁小谁先进数组m; k;}else{c[k] b[n];k; n;}}while (m <…...

ROS自学笔记十六:URDF优化_xacro文件
xacro 是一种 XML 扩展语言,用于创建和维护 URDF(Unified Robot Description Format)文件。它允许你使用参数化、宏和条件语句等功能来更灵活、更可维护地定义机器人模型。下面是关于 xacro 的详细解释: 1. 参数化(Par…...

XMLHttpRequest拦截请求和响应
环境: angular 实现: 拦截请求 向请求信息增加字段 拦截响应 过滤返回值 响应拦截: 根据angular使用的XMLHttpRequest 将对原本的请求转移到另一个将监听返回事件挂载到另一个世纪发送请求的xml上 使用get set 将客户端获取的res…...

前端 读取/导入 Excel文档
情况: 需要通过Excel表,将数据导入到数据库,但是后台人员出差了,我又只会PHP,没用过node,所以只能前端导入Excel文件,然后循环调用后台的单条添加接口了。 库: Excel.js(…...

聊聊springboot的TomcatMetricsBinder
序 本文主要研究一下springboot的TomcatMetricsBinder TomcatMetricsAutoConfiguration org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfiguration.java Configuration(proxyBeanMethods false) ConditionalOnWebApplication C…...

《动手学深度学习 Pytorch版》 10.6 自注意力和位置编码
在注意力机制中,每个查询都会关注所有的键-值对并生成一个注意力输出。由于查询、键和值来自同一组输入,因此被称为 自注意力(self-attention),也被称为内部注意力(intra-attention)…...

2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题 实现代码
根据之前发布的思路 第一步 进行数据合并 import pandas as pd# 读取所有附件的数据 data1 pd.read_excel(附件一.xlsx) data2 pd.read_excel(附件二.xlsx) data3 pd.read_excel(附件三.xlsx) data4 pd.read_excel(附件四.xlsx)# 根据商品编码将附件一和附件二连接 combi…...

larvel 中的api.php_Laravel 开发 API
Laravel10中提示了Target *classController does not exist,为什么呢? 原因是:laravel8开始写法变了。换成了新的写法了 解决方法一: 在路由数组加入App\Http\Controllers\即可。 <?phpuse Illuminate\Support\Facades\Route;…...

虚拟机构建部署单体项目及前后端分离项目
目录 一.部署单体项目 1.远程数据库 1.1远程连接数据库 1.2 新建数据库运行sql文件 2.部署项目到服务器中 3.启动服务器运行 二.部署前后端分离项目 1.远程数据库和部署到服务器 2.利用node环境启动前端项目 3.解决主机无法解析服务器localhost问题 方法一 编辑 方法二 一.部…...

C++之特殊类的设计
目录 一、单例模式 1、设计模式 2、单例模式 1、饿汉模式 2、懒汉模式 3、单例对象的释放问题 二、设计一个不能被拷贝的类 三、设计一个只能在堆上创建对象的类 四、设计一个只能在栈上创建对象的类 五、设计一个不能被继承的类 一、单例模式 1、设计模式 概念&am…...

Java练习题2020 -1
统计1到N的整数中,被A除余A-1的偶数的个数 输入说明:整数 N(N<10000), A, (A 输出说明:符合条件的数的个数 输入样例:10 3 输出样例:2 (说明:样例中符合条件的2个数是 2、8) import java.util.Scanner;p…...

LuaTable转C#的列表List和字典Dictionary
LuaTable转C#的列表List和字典Dictionaty 介绍lua中创建表测试lua中list表表转成List表转成Dictionary 键值对表表转成Dictionary 多类型键值对表表转成Dictionary 总结 介绍 之前基本都是从C#中的List或者Dictionary转成luaTable,很少会把LuaTable转成C#的List或者…...

Redis快速上手篇七(集群)
在赶工了..... Redis集群 主从复制的场景无法吗满足主机单点故障时需要引入集群配置 一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从…...

Mac 安装nvm
安装方案: 1. 从github下载nvm仓库到 ~/目录 地址:https://github.com/nvm-sh/nvm.git git clone https://github.com/nvm-sh/nvm.git 2. 进入nvm目录中执行install.sh等待执行完成,执行的操作方法就是直接将文件拖入到终端然后回车。 3.…...

python 从mssql取出datetime2类型之后格式化
我mssql是datetime2类型,用df取出之后发现是个纳秒的int(1698419713000000000 这种) 所以格式化的话就需要变成秒为单位,他们之间是10的9次方倍。所以先除以1e9之后用datetime.datetime.fromtimestamp()转换之后再format就行了 l…...

18.2 使用NPCAP库抓取数据包
NPCAP 库是一种用于在Windows平台上进行网络数据包捕获和分析的库。它是WinPcap库的一个分支,由Nmap开发团队开发,并在Nmap软件中使用。与WinPcap一样,NPCAP库提供了一些API,使开发人员可以轻松地在其应用程序中捕获和处理网络数据…...

pytest-yaml 测试平台-3.创建执行任务定时执行用例
前言 当项目用例编写完成后,需设置执行策略,可以用到定时任务设置每天几点执行。或者间隔几个小时执行一次。 创建定时任务 创建任务 勾选需要执行的项目以及运行环境 触发器可以支持2种方式:interval 间隔多久触发和 cron 表达式定时执行…...

安卓文件资源中,一个字串包含引用其他字串的写法
具体范例: <string name"product_name" translatable"false">Miscope</string><string name"app_name">string/product_name for USB Camera</string> 注意要先定义再引用。...

解决:谷歌浏览器访问http时,自动转https访问的问题
问题背景:某个系统网站,之前一直用https域名访问,现在改成http域名后,用http访问,谷歌浏览器会自动跳转到https。 解决方法: 在浏览器中输入网址:chrome://net-internals/#hsts -》 在“Delete…...

MQTT协议和边缘计算
1.基本概念 MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅信息传输协议。可以在不可靠的网络环境中进行扩展,适用于设备硬件存储空间或网络带宽有限的场景。使用MQTT协议,消息发送者与接收者不受时间和空间的限制…...

Redis(04)| 数据结构-压缩列表
压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。 但是,…...

516 最长回文子序列(区间DP)(灵神笔记)
题目 最长回文子序列 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入:s …...

Kafka - 异步/同步发送API
文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求:创建Kafka生产者,采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…...

嵌套for循环在外层循环和内层循环中使用两个Executors.newCachedThreadPool缓存线程池执行操作
1. 首先,我们需要创建两个ExecutorService对象,这两个对象将作为我们的缓存线程池。 2. 然后,我们使用嵌套的for循环来执行我们的操作。在每个外层循环中,我们将创建一个新的任务并提交给外层线程池。在这个任务中,我…...

【uniapp+云函数调用】人脸识别,实人认证,适用于app,具体思路解析,已实现
2023.10.8 需求: uniapp开发的app项目中使用人脸识别 app项目都是第一次搞,更别提人脸识别了。目前已有的就是Dcloud账号已申请,实现需求的时间没那么紧迫 此篇会详细记录从0到1的过程 2023.10.24 今天开始探究实现的过程 可能会记录的有些冗余 效果图如下: uniapp开发指南…...

系列十六、bean有哪些生命周期的回调方法?有哪几种实现方式?
一、概述 bean的生命周期的回调方法主要分两种,一种是初始化时进行调用,另外一种是销毁时进行调用。但是不管是初始化还是销毁,都对应着三种方式。 二、实现方式 2.1、注解方式 PostConstruct PreDestroy Component public class UserSe…...

2023平台工程崭露头角,AI 带来新机遇与挑战
在今年,平台工程正在迅速在 IT 企业中崭露头角,成为软件开发团队的必要实践。根据 CloudBees 发布的最新报告《2023年平台工程:快速采纳和影响》,83%的受访者已经完全实施了平台工程,或正处于某种实施阶段。 平台工…...

如何使用python快速修改Excel表单中的大量数据
python修改Excel中的内容进阶加速版 前面有一篇文章讲到了使用python处理Excel中的数据文件,即修改Excel中的数据,但是那个版本的代码跑点小规模、小数据量的excel还行,一旦数据量达到万条级别,代码运行会非常慢!因此&…...

✔ ★【备战实习(面经+项目+算法)】 10.27学习
✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…...