kafka 各种选举过程
一、kafka 消费者组协调器 如何选举
Kafka 中的消费者组协调器(Group Coordinator)是通过以下步骤选举的:
-
分区映射:
- Kafka 使用一个特殊的内部主题
__consumer_offsets来存储消费者组的元数据。该主题有多个分区,每个分区负责存储一部分消费者组的信息。
- Kafka 使用一个特殊的内部主题
-
哈希分配:
- 每个消费者组的 ID(groupId)通过哈希函数映射到
__consumer_offsets主题的一个特定分区。
- 每个消费者组的 ID(groupId)通过哈希函数映射到
-
分区领导者:
- 每个分区都有一个领导者(Leader),该领导者是 Kafka 集群中的一个 Broker。这个 Broker 就是负责管理该分区上所有消费者组的协调器。
-
协调器确定:
- 当一个消费者加入消费者组时,它会通过哈希函数找到对应的
__consumer_offsets分区,然后找到该分区的领导者 Broker,这个 Broker 就是该消费者组的协调器。
- 当一个消费者加入消费者组时,它会通过哈希函数找到对应的
-
元数据更新:
- 当消费者组的成员发生变化(如消费者加入或离开)时,协调器会更新
__consumer_offsets主题中的元数据,并通知所有相关的消费者。
- 当消费者组的成员发生变化(如消费者加入或离开)时,协调器会更新
通过这种机制,Kafka 实现了消费者组协调器的分布式选举和管理,确保每个消费者组都有一个协调器来管理其成员关系和分区分配。
二、 kafka BrokerController 如何选举
Kafka 中的 Broker Controller 是通过 Zookeeper 进行选举的。具体步骤如下:
-
启动过程:
- 当一个 Kafka Broker 启动时,它会尝试在 Zookeeper 中创建一个临时的
/controller节点。 - 这个节点的创建是一个原子操作,只有一个 Broker 能够成功创建这个节点。
- 当一个 Kafka Broker 启动时,它会尝试在 Zookeeper 中创建一个临时的
-
成功创建:
- 成功创建
/controller节点的 Broker 就成为了 Controller。 - 该 Broker 会在
/controller节点中写入自己的 Broker ID,其他 Brokers 可以通过读取这个节点来知道当前的 Controller 是哪个 Broker。
- 成功创建
-
监听机制:
- 其他 Brokers 会监听
/controller节点的变化,以便在当前 Controller 失效时能够及时感知。 - 如果当前的 Controller Broker 崩溃或失效,Zookeeper 会删除
/controller节点,因为它是一个临时节点。
- 其他 Brokers 会监听
-
重新选举:
- 当
/controller节点被删除时,其他 Brokers 会再次尝试创建这个节点。 - 其中一个 Broker 会成功创建并成为新的 Controller。
- 当
通过这种机制,Kafka 保证了在任何时刻只有一个 Broker 充当 Controller,并且能够在 Controller 失效时快速进行重新选举。
三、kafka 分区 leader 如何选举
Kafka 分区 Leader 的选举过程如下:
-
分区元数据:
- 每个分区都有一个副本集(Replica Set),包含一个 Leader 和多个 Follower。
- 分区的元数据存储在 Zookeeper 中,包括所有副本的列表和当前的 Leader。
-
初始选举:
- 当 Kafka 集群启动时,Controller 会从 Zookeeper 中读取分区的元数据,并为每个分区选举一个 Leader。
- 通常,副本列表中的第一个 Broker 会被选为 Leader。
-
Leader 失效检测:
- Controller 通过心跳机制监控各个 Broker 的状态。
- 如果检测到当前 Leader 失效(例如,Broker 崩溃或网络分区),Controller 会触发重新选举。
-
重新选举:
- Controller 会从剩余的副本中选择一个新的 Leader。
- 选择标准通常是优先选择 ISR(In-Sync Replica,同步副本)中的副本,因为这些副本的数据是最新的。
- 如果没有可用的 ISR,Controller 会选择其他副本作为 Leader。
-
更新元数据:
- 选举完成后,Controller 会更新 Zookeeper 中的分区元数据,记录新的 Leader 信息。
- 其他 Brokers 和客户端会通过 Zookeeper 或元数据请求获取最新的 Leader 信息。
通过这种机制,Kafka 保证了分区在 Leader 失效时能够快速进行重新选举,确保数据的高可用性和一致性。
四、kafka 消费者 leader 如何选举
Kafka 中的消费者 Leader 选举是指在一个消费组(Consumer Group)中选举出一个消费者作为 Leader,负责协调和管理消费组的成员关系和分区分配。这个过程通常由群组协调器(Group Coordinator)来完成。具体步骤如下:
-
消费者加入消费组:
- 当一个消费者加入消费组时,它会向群组协调器发送
JoinGroup请求。 - 群组协调器是负责管理消费组的 Kafka Broker。
- 当一个消费者加入消费组时,它会向群组协调器发送
-
选举 Leader:
- 群组协调器会选举一个消费者作为 Leader。通常,第一个发送
JoinGroup请求的消费者会被选为 Leader。
- 群组协调器会选举一个消费者作为 Leader。通常,第一个发送
-
分区分配:
- 被选为 Leader 的消费者会负责分配分区给消费组中的各个消费者。
- Leader 会根据消费组的分区分配策略(如 Range、RoundRobin 等)来进行分配。
-
同步分配方案:
- Leader 生成分区分配方案后,会将方案发送给群组协调器。
- 群组协调器会将分配方案同步给所有消费者。
-
消费者确认:
- 所有消费者收到分配方案后,会向群组协调器发送
SyncGroup请求,确认分配。 - 一旦所有消费者确认,分区分配就正式生效,消费者开始消费分配到的分区。
- 所有消费者收到分配方案后,会向群组协调器发送
-
Leader 失效处理:
- 如果当前的 Leader 消费者失效(如崩溃或断开连接),群组协调器会重新选举一个新的 Leader。
- 新的 Leader 会重新进行分区分配,并同步给所有消费者。
通过这种机制,Kafka 保证了消费组在消费者失效时能够快速进行重新选举和分区分配,确保数据的高可用性和一致性。
相关文章:
kafka 各种选举过程
一、kafka 消费者组协调器 如何选举 Kafka 中的消费者组协调器(Group Coordinator)是通过以下步骤选举的: 分区映射: Kafka 使用一个特殊的内部主题 __consumer_offsets 来存储消费者组的元数据。该主题有多个分区,每…...
树与二叉树【数据结构】
前言 之前我们已经学习过了各种线性的数据结构,顺序表、链表、栈、队列,现在我们一起来了解一下一种非线性的结构----树 1.树的结构和概念 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一…...
简单几步,把浏览器书签转换成导航网页
废话不多说直奔主题上干货 Step 1 下载浏览器书签 1,电脑浏览器点击下载Pintree Pintree 是一个开源项目,旨在将浏览器书签导出成导航网站。通过简单的几步操作,就可以将你的书签转换成一个美观且易用的导航页面。 2. 安装 Pintree B…...
Mac安装Hoomebrew与升级Python版本
参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本,你可以使用以下命令来设置默认的Python版本: # 首先找到新安…...
代码审计:Bluecms v1.6
代码审计:Bluecms v1.6 漏洞列表如下(附Exp): 未完待续… 1、include/common.fun.php->getip()存在ip伪造漏洞 2、ad_js.php sql注入漏洞 Exp:view-source:http://127.0.0.3/bluecms/ad_js.php?ad_id12%20UNION%20SELECT1,2,3,4,5,6,database() 3、…...
谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码
文章目录 一, 使用逆向工程生成的代码二,生成品牌管理菜单三,几个小问题 在本次的技术实践中,我们利用逆向工程的方法成功地为后台管理系统增加了品牌管理功能。这种开发方式不仅能快速地构建起功能模块,还能在一定程度…...
如何利用Jenkins自动化管理、部署数百个应用
目录 1. Jenkins 安装与部署步骤 1.1 系统要求 1.2 安装步骤 1.2.1 Windows 系统 1.2.2 CentOS 系统 1.3 初次配置 2. Gradle 详细配置方式 2.1 安装 Gradle 2.1.1 Windows 系统 2.1.2 CentOS 系统 2.2 配置 Jenkins 中的 Gradle 3. JDK 详细配置方式 3.1 安装 JD…...
Java之归并排序
归并排序 归并排序(Merge Sort)算法,使用的是分治思想。分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。 核心源码: mergeSort(m->n) merge(mergeSort(m-&g…...
了解ChatGPT API
要了解如何使用 ChatGPT API,可以参考几个有用的资源和教程,这些资源能帮助你快速开始使用 API 进行项目开发。下面是一些推荐的资源: OpenAI 官方文档: 访问 OpenAI 的官方网站可以找到 ChatGPT API 的详细文档。这里包括了 API …...
EasyAnimate - 阿里开源视频生成项目,国产版Sora,高质量长视频生成 本地一键整合包下载
EasyAnimate是阿里云人工智能平台PAI自主研发的DiT-based视频生成框架,它提供了完整的高清长视频生成解决方案,包括视频数据预处理、VAE训练、DiT训练、模型推理和模型评测等。在预训练模型的基础上,EasyAnimate可通过少量图片的LoRA微调来改…...
7月23日JavaSE学习笔记
异常: 程序中一些程序处理不了的特殊情况 异常类 Exception 继承自 Throwable 类(可抛出的) Throwable继承树 Error:错误/事故,Java程序无法处理,如 OOM内存溢出错误、内存泄漏...会导出程序崩溃 常见的…...
Linux——DNS服务搭建
(一)搭建nginx 1.首先布置基本环境 要求能够ping通外网,有yum源 2.安装nginx yum -y install nginx 然后查看验证 3.修改网页配置文件 修改文件,任意编写内容,然后去物理机测试 (二)创建一…...
C#中的wpf基础
在WPF中,Grid 是一种非常强大的布局控件,用于创建网格布局。它允许你将界面划分为行和列,并将控件放置在这些行和列中。 以下是一些关键点和示例,帮助你理解 WPF 中的 Grid: 基本属性 RowDefinitions:定义…...
基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)
基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合,根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源,实现了刷题的自动化,…...
SSH -i的用法
缘起 今天使用ssh -i指定私钥时遇到以下错误: WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0644 for /home/ken/.ssh/my.pem are too open. It is required that your private key files are NOT accessible by others. This private key will b…...
小白学习webgis的详细路线
推荐打开boss直聘搜索相关岗位,查看岗位要求,对症下药是最快的。 第一阶段:基础知识准备 计算机基础 操作系统:理解Windows、Linux或macOS等操作系统的基本操作,学会使用命令行界面。网络基础:掌握TCP/I…...
使用ChatGPT来撰写和润色学术论文的教程(含最新升级开通ChatGpt4教程)
现在有了ChatGPT4o更加方便了, 但次数太少了 想要增加次数可以考虑升级开桶ChatGpt4 ( OPENAI4 可以减2刀) 一、引言 在学术研究中,撰写高质量的论文是一项重要的技能。本教程将介绍如何利用ChatGPT来辅助完成从论文构思到润色的全过程…...
常见的 HTTP 状态码分类及说明
HTTP 响应状态码(HTTP status code),表示服务器对请求的处理结果。常见的 HTTP 状态码有以下几类: 1xx: 信息响应 (Informational Responses) 100 Continue: 请求已收到,客户端应继续发送请求的其余部分。101 Switch…...
Leetcode700.二叉搜索树中搜索具体值
二叉搜索树的定义: 一颗空树或者具有以下性质的二叉树: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节…...
自动导入unplugin-auto-import+unplugin-vue-components
文章介绍 接下来将会以Vite Vue3 TS的项目来举例实现 在我们进行项目开发时,无论是声明响应式数据使用的ref、reactive,或是各种生命周期,又或是computed、watch、watchEffect、provide-inject。这些都需要前置引入才能使用: …...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
