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。这些都需要前置引入才能使用: …...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
