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。这些都需要前置引入才能使用: …...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
