当前位置: 首页 > news >正文

Kafka02-集群选主

Kafka知识点

文章目录

  • Kafka知识点
    • @[toc]
  • 1-Kafka02-集群选主
    • 1-kafka为什么抛弃zookeeper?
      • 一、Zookeeper 的“重”体现在哪里?
      • 二、Kafka 的替代方案:KRaft(Kafka Raft)
        • KRaft 的核心机制:
      • 三、为什么 KRaft 更“轻”?
      • 四、总结一句话
    • 2-RAFT的的实现机制
    • 3-RAFT的的实现机制-故事理解
    • 4-kafka如何借助zookeeper进行选举的?
    • 5-ZooKeeper 的选举机制如何保证公平性?
    • 6-kafka是如何选取leader和follow?
      • 1. 先给出技术答案(供你随时“查表”)
      • 2. 小故事:蜂巢里选“蜂王”(Kafka 版)
        • 2.1 三个工蜂候选人
        • 2.2 蜂王登记处
        • 2.3 日常采蜜
        • 2.4 蜂王意外
        • 2.5 故事寓意
      • 3. 一句话总结
    • 7-kafka如何选取controller?
      • 🏰 第一章:权杖的诞生
      • ⚔️ 第二章:权杖的失落
      • 🧠 第三章:纪元的力量
      • 🏁 尾声:永恒的守护

1-Kafka02-集群选主

1-kafka为什么抛弃zookeeper?

Kafka 抛弃 Zookeeper 的核心原因可以归结为一句话:Zookeeper 太重,Kafka 想轻装上阵。这个“重”主要体现在以下几个方面:


一、Zookeeper 的“重”体现在哪里?

维度具体表现
部署复杂Zookeeper 是一个独立于 Kafka 的分布式系统,部署 Kafka 时必须先部署并维护一个高可用的 Zookeeper 集群。
运维成本高Zookeeper 有自己的配置、监控、升级和安全策略,管理员需要同时掌握和维护两套系统。
性能瓶颈Zookeeper 的写性能有限,Kafka 在 broker 数量或分区数增长时,Zookeeper 会成为扩展瓶颈。
一致性风险Zookeeper 与 Kafka 的元数据同步是异步的,可能出现状态不一致或延迟,导致 leader 选举失败或脑裂。
安全模型割裂Zookeeper 的安全机制(如 ACL、TLS)与 Kafka 不完全兼容,配置复杂且容易出错。

二、Kafka 的替代方案:KRaft(Kafka Raft)

Kafka 从 2.8 开始引入 KRaft 模式(Kafka Raft Metadata mode),并在 3.3.1 起正式生产可用。

KRaft 的核心机制:
  • Raft 协议:Kafka 自己实现了一个基于 Raft 的共识协议,用于在多个 controller 节点之间同步元数据。
  • 事件溯源(Event Sourcing):所有集群状态变更(如 topic 创建、分区 leader 变更)都作为事件写入一个内置的 Kafka topic(__cluster_metadata)。
  • Quorum Controller:Kafka 集群中的一部分 broker 充当 controller,组成一个 quorum(多数派)来管理元数据,不再依赖外部系统。

三、为什么 KRaft 更“轻”?

维度Zookeeper 模式KRaft 模式
部署需额外部署 Zookeeper 集群仅需 Kafka 本身
启动多进程(Kafka + ZK)单进程即可启动 Kafka
一致性异步同步,滞后风险基于 Raft 的强一致性
扩展性分区上限约 20 万可支持数百万分区
故障恢复需从 Zookeeper 加载状态内存中已有最新状态,恢复更快
安全模型两套系统,配置复杂统一安全模型,简化配置

四、总结一句话

Kafka 抛弃 Zookeeper,是因为它太重:部署重、运维重、性能瓶颈重、一致性风险重。
用 KRaft 替代后,Kafka 变成了“自我管理”的系统——轻部署、轻运维、强一致、高扩展。


2-RAFT的的实现机制

Raft 把共识问题拆成 3 个独立子问题,用一套“日志复制”机制解决:

  1. Leader 选举
    每个节点维护一个递增的“任期号”;超时没收到 Leader 心跳就自增任期、投自己一票并拉票,先得多数票的成为新 Leader,其余节点自动降为 Follower。

  2. 日志复制
    所有客户端写请求只发给 Leader。Leader 把命令追加到自己的日志,并行地发给所有 Follower;当这条日志在多数节点落盘后,Leader 提交(commit)它并应用到状态机,再通知 Follower 提交。

  3. 安全性
    • 投票限制:只有日志比自己“新”的候选者才能拿到票,防止旧 Leader 重新当选。
    • 任期检查:节点只接受来自当前或更高任期 Leader 的日志;过期消息会被拒绝。
    • 已提交日志不可被覆盖,保证状态机一致性。

实现上就是:心跳保活、日志条目顺序复制、多数派确认、任期号+投票规则防脑裂。


3-RAFT的的实现机制-故事理解

小村庄里有三位记帐先生:阿福、阿寿、阿喜。
他们共用一本“神奇账本”,必须保证三人的账页完全一致。

1️⃣ 选“大当家”(Leader 选举)
每天太阳一升,谁先敲锣喊“我活得好好的”,谁就当大当家。
如果锣声停了(心跳超时),其余两人就各自敲一下“竞选锣”,喊“任期+1!给我投票!”
谁先得到两张选票(多数),谁立刻变成新大当家,其他人自动收摊当跟班。

2️⃣ 一起抄账(日志复制)
只有大当家能接客。
客人来借钱,大当家先写在自己的账页上,然后立刻把这一行抄给两位跟班。
当至少两人(含大当家共多数)都写完并盖章,大当家当众大喊“这一页生效!”
跟班们也跟着喊“生效!”——整本账同步完成。

3️⃣ 防捣乱(安全性)
• 投票规矩:谁的账页最新、任期最高,才配当大当家,旧人别抢。
• 任期印章:每页账都盖当天“任期章”,过期章立即作废。
• 一旦某一页当众宣布生效,就永远不许涂改,确保三人的账本永远一致。

从此,三位先生靠“锣声保活、抄账同步、任期防乱”,把全村账目管得清清楚楚,人人记得住、用得来。


4-kafka如何借助zookeeper进行选举的?

从前,在一个叫“卡夫卡”的大蜂巢里,住着成千上万只勤劳的小蜜蜂(Broker)。它们每天嗡嗡地搬运花粉、酿蜜、存蜜,忙得不可开交。可是蜂巢里必须有一位“蜂王”(Controller),负责发号施令:哪块蜂蜡该挪走、哪间蜂房归谁用、哪只蜜蜂突然失联了要赶快补缺……没有蜂王,整个蜂巢就会乱成一锅粥。

可蜂王不能世袭,也不能打架抢位,得“民主”选出来。于是,蜜蜂们把家安在一棵巨大的“决策树”(ZooKeeper)上。这棵树有三样法宝:

  1. 魔法便签(ZNode):谁都能在上面贴小纸条。
  2. 一次只能看一张的“放大镜”(ephemeral sequential):保证同一时间只有一只蜜蜂能看清便签内容。
  3. 树精灵(Watcher):一旦有人贴了纸条或撕了纸条,树精灵立刻放声大喊,通知所有蜜蜂。

选举日到了——

  1. 贴竞选宣言
    每只想当蜂王的蜜蜂,都扑棱着翅膀飞到决策树前,在同一条树枝上贴一张“竞选宣言”(创建一个名为 /kafka/controller 的 ephemeral 节点),并在背面写上自己的“蜂号”(broker id)。因为放大镜一次只能看一张,先到的蜜蜂会成功贴上,后到的只能看到“已被占用”,遗憾落选。

  2. 宣布当选
    贴成功的蜜蜂立刻化身为蜂王,开始统筹蜂巢事务;落选的蜜蜂也不闲着,它们当“备胎”,死死盯着那张竞选宣言,耳朵竖得比兔耳朵还直——只要树精灵喊一声“宣言被撕了”(节点消失),备胎们就再次蜂拥而上,重新贴宣言、重新抢位。

  3. 蜂王驾崩与再选
    万一现任蜂王太累、生病、或者被熊孩子捅了一棍(进程崩溃或网络分区),它贴的宣言就会自动被树精灵撕掉(ephemeral 节点随会话消失)。树精灵一声吼,所有备胎蜜蜂瞬间得知“蜂王没了”,于是新一轮贴宣言大赛开始,最快的那只再次加冕。

  4. 日常管理
    新蜂王上任后,会把自己的“通讯录”(集群元数据:分区 leader、ISR、配置等)写进决策树的另一片枝桠,让每只蜜蜂随时查看;同时继续监听树精灵的声音,保证一旦又有蜜蜂失联,自己能第一时间调整“岗位分工”,维持蜂巢秩序。

就这样,卡夫卡蜂巢靠着“决策树”公平、快速、无血雨腥风地选出一任又一任蜂王,年年花蜜满仓,秩序井然。

——这就是 Kafka 借助 ZooKeeper 进行 Controller 选举的小故事。


5-ZooKeeper 的选举机制如何保证公平性?

把 ZooKeeper 的“领导选举”想象成一次“抢凳子”游戏,就能一眼看出它怎样把“公平”写进了 DNA:

  1. 同一把椅子:
    所有参与者(机器/进程)只能去抢同一把“虚拟椅子”(同一个 znode,比如 /election)。没有第二把椅子可选,这就天然杜绝了“暗箱分票”。

  2. 先来后到,编号写死:
    抢椅子时必须贴一张“临时顺序便签”(ephemeral sequential)。ZooKeeper 会按到达时间自动在便签后面追加一串递增数字,例如
    /election/n_0000000001/election/n_0000000002 ……
    数字一旦生成就不能改,相当于给每个人发了一张“时间戳身份证”。谁最小谁当选,规则公开透明,谁也抬不了杠。

  3. 原子写:
    创建便签是原子操作,ZooKeeper 同一时刻只处理一个请求,保证不会出现“两个人拿到同一编号”的乌龙。

  4. 只看前一位,不插队:
    没抢到椅子的节点不用盲等,只需 watch 比自己编号小 1 的那个节点。一旦前一位“挂掉”便签消失,事件立刻触发,下一位补位。
    整个过程没有“主持人”可偏心,也没有“加塞”空间。

  5. 会话失效自动出局:
    临时节点绑定会话;机器宕机或网络分区,会话超时节点自动删除,椅子自然空出。既防止“死节点占坑”,也避免了“人工踢人”的争议。

一句话:同一把椅子 + 顺序编号 + 原子写 + 仅 watch 前驱,让 ZooKeeper 的选举机制变成了“阳光下的抢凳子”,谁先到谁先坐,谁挂了谁让座——公平性被锁进了协议里,谁也改不了。


6-kafka是如何选取leader和follow?

1. 先给出技术答案(供你随时“查表”)

在 Apache Kafka 里,“选老大”这件事由 ZooKeeper(旧版)或 KRaft 自己(新版)负责。核心规则只有一句话:

“谁的数据最全,谁先注册成功,谁就是 Leader;剩下的都是 Follower。”

具体流程

  1. 每个 broker 启动后,先在 ZooKeeper / KRaft 里抢注一把“临时锁”(/brokers/ids/xxx)。
  2. Controller(总管家)发现某个分区没有 Leader,就把所有活着的副本(ISR)按“数据完整度”排序。
  3. 排在第一的副本被任命为 Leader,其余副本变成 Follower,并向新 Leader 发送“FETCH”请求去追赶数据。
  4. 如果 Leader 挂了,重复第 2 步,重新选举。

2. 小故事:蜂巢里选“蜂王”(Kafka 版)

在一片叫 Cluster 森林 的地方,有一个巨大的蜂巢——Topic 蜂巢。蜂巢里有很多六角形的小格子,每个小格子就是一个 Partition。蜜蜂们每天辛勤地把花蜜(消息)搬进这些小格子。

2.1 三个工蜂候选人

蜂巢里有三只工蜂,名字分别叫 Lily、Frank、Ivy。它们都守在同一个格子(Partition 0)旁边,谁都想当这个格子的 蜂王(Leader),因为只有蜂王才能决定花蜜放进格子的顺序。

2.2 蜂王登记处

蜂巢门口有一个魔法板(ZooKeeper / KRaft),魔法板上写着一条规矩:

“想成为蜂王?先把你的翅膀贴在这儿,谁先来、谁翅膀最完整,谁就当蜂王!”

三只工蜂一拥而上:

  • Lily 动作最快,翅膀也最完整(数据最全),她“啪”一声把翅膀印先盖在了魔法板上。
  • Frank 慢了一步,发现 Lily 已经是蜂王了,只好退到旁边,默默当 护卫蜂(Follower)
  • Ivy 那天感冒,翅膀缺了一小块(数据落后),魔法板直接把她标记为“候补护卫蜂”,也当 Follower。
2.3 日常采蜜

每天,外面的花朵把花蜜交给蜂王 Lily。Lily 先在格子口大声宣布:“第 1 滴花蜜放这儿!第 2 滴放那儿!” 护卫蜂 Frank 和 Ivy 就拿着小本子,飞快地抄下来,保证自己和蜂王记录一模一样(副本同步)。

2.4 蜂王意外

有一天,一阵狂风把 Lily 卷走了!格子口没了蜂王,花蜜们急得团团转。
魔法板立刻感知到“蜂王缺席”,它大喊:“紧急选举!”

  • Frank 和 Ivy 再次跑到魔法板前比翅膀。
  • 这次 Frank 翅膀比 Ivy 更完整,于是他“啪”一下盖章,成了 新蜂王
  • Ivy 继续当护卫蜂,格子又恢复了秩序,花蜜们继续有序地排队。
2.5 故事寓意

蜂巢里的魔法板就是 Kafka 的 Controller
工蜂们的翅膀就是 副本的数据进度(LEO、HW)
蜂王更替的过程,就是 Kafka Leader 选举


3. 一句话总结

Kafka 选 Leader 就像蜂巢选蜂王:
“数据最全、动作最快”的副本永远优先当蜂王,剩下的乖乖做护卫,蜂王一旦失踪,再比一次翅膀就行啦!


7-kafka如何选取controller?

故事标题:《国王的权杖:Kafka王国的Controller选举传奇》


在遥远的分布式大陆上,有一个叫做 Kafka 的消息王国。王国里住着许多忠诚的 Broker骑士,他们日夜不停地传递消息,确保每一条数据都能安全送达。

但王国不能没有国王。国王手握权杖,掌管整个王国的秩序:谁负责哪个分区、谁该成为新的队长、谁失职了要被替换……这个国王,就是传说中的 Controller


🏰 第一章:权杖的诞生

在王国建立之初,Zookeeper长老在广场中央立起了一根 金色权杖/controller 节点),并宣布:

“谁能第一个拔出这把权杖,谁就是国王!”

于是,所有Broker骑士一拥而上:

  • Broker-0 动作最快,一把拔出了权杖,金光四射,众骑士齐声高呼:“新王登基!”
  • 其他骑士(Broker-1、Broker-2)虽然慢了半拍,但他们并不气馁,而是默默地站在一旁,目不转睛地盯着权杖(注册Watcher),一旦权杖落地,他们立刻冲上去再抢。

⚔️ 第二章:权杖的失落

日子一天天过去,Broker-0国王勤勤恳恳,管理着王国的每一个角落。

可有一天,灾难降临——国王突然昏倒了(宕机),权杖从他手中滑落,瞬间化为光点消失(Zookeeper临时节点消失)。

几乎在同一瞬间,所有骑士都感知到了权杖的消失:

  • Broker-1大喊:“权杖无主,我来称王!”
  • Broker-2也不甘示弱:“我才是天命所归!”

他们再次冲向广场中央,展开一场无声却激烈的争夺

最终,Broker-2 手快一步,再次拔出了权杖,成为了新的国王。Broker-1虽然遗憾落败,但他依旧忠诚地站在一旁,继续守护王国。


🧠 第三章:纪元的力量

为了防止“伪王”篡位,Zookeeper长老还为权杖设下了 纪元编号(epoch number)

每一次权杖易主,纪元编号都会+1。

  • 如果前任国王Broker-0苏醒后,还以为自己仍是国王,试图发号施令,其他骑士只需看一眼他的纪元编号(比如1),再对比现任国王的编号(比如2),就会冷冷地说:

“你的时代已经过去了。”

于是,伪王自动退位,王国秩序依旧井然。


🏁 尾声:永恒的守护

从此以后,Kafka王国在 权杖机制 的守护下,无论国王如何更替,王国始终运转如常。

每一位Broker骑士都知道:

不是谁最强,而是谁最先
不是谁永远为王,而是谁随时准备接棒

这就是Kafka王国Controller选举的故事——
一场关于速度、忠诚与秩序的传奇。


📌 技术彩蛋

  • Controller是Zookeeper临时节点 /controller,创建成功者即为Controller。
  • 其他Broker监听该节点,一旦失效即触发重新选举。
  • 通过epoch number防止“脑裂”问题。

http://www.dtcms.com/a/354660.html

相关文章:

  • BeyondMimic——通过引导式扩散实现动作捕捉:基于Diffuse-CLoC构建扩散框架,可模仿动作、导航避障(含UniTracker的详解)
  • InstructGPT:使用人类反馈训练语言模型以遵循指令
  • ARM相关的基础概念和寄存器
  • Shell编程知识整理
  • 从 WPF 到 Avalonia 的迁移系列实战篇2:路由事件的异同点与迁移技巧
  • Linux下OpenRadioss源码编译安装及使用
  • Shell 字符串操作与运算符
  • 利用ChatGPT打造行业LLM大模型应用
  • 外部请求至k8s集群内部对应节点全流程介绍
  • 使用docker搭建嵌入式Linux开发环境
  • HTML5七夕节网站源码
  • Java:TCP/UDP网络编程
  • DevOps篇之利用Jenkins实现多K8S集群的版本发布
  • Docker-compose常用命令
  • Helm 在 K8s 中的常见应用场景
  • 【K8s】整体认识K8s之K8s的控制器
  • Node.js + MongoDB 搭建 RESTful API 实战教程
  • 从入门到入土之——奇异值分解(SVD)
  • 重塑可观测性成本:解析Coralogix的智能成本优化之道
  • 深入浅出:贴片式eMMC存储与国产芯(君正/瑞芯微)的协同设计指南
  • GitHub 宕机自救指南:确保开发工作不间断
  • 学习做动画6.瞄准偏移
  • 5.2 I/O软件
  • STL库——list(类函数学习)
  • 搭建私有云3步法:cpolar简化Puter本地云端配置
  • leetcode238:除自身以外的数组的乘积(前缀和思想)
  • Fair Federated Learning with Biased Vision-Language Models
  • 一文读懂:自然语言处理中的语义理解技术
  • C# Deconstruct | 简化元组与对象的数据提取
  • 秋招笔记-8.28