论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
大数据
›
数据仓库与分析
›
详解Kafka 四个推举,Controller 推举、Partition leade ...
详解Kafka 四个推举,Controller 推举、Partition leader 推举、GroupCoord ...
王國慶
论坛元老
|
2025-4-2 23:17:33
|
显示全部楼层
|
阅读模式
楼主
主题
1865
|
帖子
1865
|
积分
5599
Kafka 核心推举机制与流量规划详解
一、Kafka 四大推举机制
1. Controller 推举
作用
:Controller 是 Kafka 集群的核心协调者,负责管理全部分区的状态(如创建、删除、Leader 推举)和副本同步(ISR 维护)。
推举触发条件
:
集群启动时,全部 Broker 尝试抢占 Zookeeper 的 /controller 临时节点。
当前 Controller 宕机或与 Zookeeper 失联(Session 超时)。
推举过程
:
抢占临时节点
:第一个成功创建 /controller 节点的 Broker 成为 Controller。
Watch 机制
:其他 Broker 监听该节点,若节点被删除,立刻触发新一轮推举。
关键特性
:
唯一性
:同一时间集群只有一个 Controller。
故障恢复
:Controller 宕机后,新 Controller 会重新加载集群元数据并接管工作。
2. Partition Leader 推举
作用
:为每个分区推举一个 Leader 副本,负责处理客户端读写请求;Follower 副本从 Leader 同步数据。
触发条件
:
Leader 副本宕机(Controller 检测到副本离线)。
分区扩容或手动触发 Leader 重推举。
推举策略
:
优先从 ISR(In-Sync Replicas)中选择
:ISR 是当前与 Leader 保持同步的副本聚集。
// 默认策略:从 ISR 中选择第一个可用副本
def selectLeader(): Option[Int] = isr.headOption
复制代码
ISR 为空时
:若 unclean.leader.election.enable=true,答应选择非 ISR 副本(大概丢失数据)。
示例流程
:
Controller 监控到分区 Leader 下线。
从 ISR 列表中选择新 Leader(如 Replica 2)。
更新 Zookeeper 中的 Leader 元数据,通知全部 Broker。
3. GroupCoordinator 推举(消费组协调器)
作用
:每个消费者组(Consumer Group)需有一个 GroupCoordinator 负责管理消费者成员的参加/退出、Offset 提交与负载均衡。
推举触发条件
:
消费者组初次启动时。
原 GroupCoordinator 宕机。
推举过程
:
确定 Coordinator Broker
:
计算消费者组 group.id 的哈希值,映射到 __consumer_offsets 主题的某个分区。
该分区的 Leader 副本所在 Broker 即为 GroupCoordinator。
// 分区计算方式
partition = hash(group.id) % numPartitionsOf__consumer_offsets
复制代码
故障转移
:若该 Broker 宕机,由 Controller 触发分区 Leader 推举,新 Leader 接管协调工作。
4. 消费组 Leader 推举(消费者组内)
作用
:消费者组内的 Leader 负责执行分区分配策略(如 Range、RoundRobin),并将分配结果同步给 GroupCoordinator。
触发条件
:
消费者参加或退出组(触发 Rebalance)。
推举策略
:
第一个参加组的消费者
:自动成为 Leader。
Leader 下线
:GroupCoordinator 重新选择组内任意活泼消费者作为新 Leader。
流程示例
:
消费者 C1 参加空组,成为 Leader。
消费者 C2 参加,触发 Rebalance,C1 仍为 Leader,负责分配分区。
C1 下线,GroupCoordinator 指定 C2 为新 Leader。
二、Kafka 流量规划方法论
流量规划的目标是确保集群在
吞吐量、延迟、容错性
之间达到平衡,具体步骤如下:
1. 容量评估
业务需求
:
生产流量
:峰值消息速率(msg/s)与消息大小(均匀/最大)。
消费流量
:消费者数目、消费延迟要求。
存储需求
:数据保存时间(Retention)与总数据量(TB)。
硬件资源
:
Broker 数目
:基于总吞吐量(需预留 20%~30% Buffer)。
磁盘
:SSD(高吞吐低延迟),容量 = 逐日数据量 × 保存天数 × 副本数 × 1.3(索引开销)。
网络带宽
:峰值流量 × 副本数 ≤ 网卡容量(如 10Gbps)。
2. 分区(Partition)规划
分区数目
:
吞吐量
:单个分区写入上限约 10MB/s,消费上限约 20MB/s。
目标吞吐量 100MB/s → 至少 10 个分区。
复制代码
消费者并行度
:分区数 ≥ 消费者线程数(避免空闲线程)。
Key 分布
:若需保证相同 Key 的顺序性,合理设置分区键。
分区分布
:
均匀分布在全部 Broker 上(避免热点)。
使用 kafka-reassign-partitions.sh 手动调解分布。
3. 副本(Replica)规划
副本数
:通常设置为 3(1 Leader + 2 Followers),平衡可用性与存储本钱。
ISR 管理
:
监控 UnderReplicatedPartitions,确保 ISR 副本数 ≥ 最小 ISR(min.insync.replicas)。
设置 unclean.leader.election.enable=false,防止数据丢失。
4. 流量控制与限流
生产者限流
:
compression.type:启用压缩(如 snappy)减少网络流量。
linger.ms 与 batch.size:调解批处理大小与等待时间。
客户端限流:通过 max.in.flight.requests.per.connection 控制并发请求数。
消费者限流
:
fetch.max.bytes:控制单次拉取数据量。
max.poll.records:限制每次 Poll 的消息数。
5. 监控与调优
关键监控指标
:
Broker
:NetworkProcessorAvgIdlePercent、RequestHandlerAvgIdlePercent。
Topic
:BytesInPerSec、BytesOutPerSec、MessagesPerSec。
Consumer
:RecordsLagMax、FetchRate。
调优手段
:
JVM 参数
:堆内存(发起 ≥ 6GB)、GC 算法(G1)。
OS 参数
:文件形貌符限制、网络缓冲区大小。
Kafka 配置
:num.network.threads、num.io.threads。
三、实战示例:电商订单系统流量规划
需求
:
峰值订单量:10万/秒,消息大小 1KB。
数据保存 7 天,3 副本。
消费者组:10 个实例,要求消费延迟 ≤ 1秒。
规划步骤
:
计算吞吐量
:
生产流量:10万 msg/s × 1KB = 100MB/s。
消费流量:100MB/s × 3(副本) = 300MB/s。
分区数
:
按生产者吞吐量:100MB/s ÷ 10MB/s/分区 = 10 分区。
按消费者并行度:10 消费者实例 → 至少 10 分区。
Broker 数目
:
单 Broker 写入本领:50MB/s(预留 Buffer)。
Broker 数 ≥ 100MB/s ÷ 50MB/s = 2,发起 3(容错)。
存储容量
:
逐日数据量:10万/s × 86400s × 1KB ≈ 8.64TB。
总存储:8.64TB × 7 × 3 ≈ 181TB,需 3 Broker × 60TB/节点。
网络带宽
:
总流量:300MB/s × 8 bits = 2.4Gbps → 3 Broker × 1Gbps 网卡(需 Bonding 或 10Gbps 网卡)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
论坛元老
这个人很懒什么都没写!
楼主热帖
webman
不想打开 IDE 的摆烂一天
Jupyter Notebook,太强大了
React技巧之发出http请求
【Shashlik.EventBus】.NET 事件总线, ...
【网络】https单向认证和双向认证 ...
APP内存管理
Apache DolphinScheduler 3.0.0 正式版 ...
Bluecmsv1.6-代码审计
java如何显示"html转义字符"对应的原始 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
鸿蒙
Mysql
网络安全
公有云
物联网
Postrge-SQL技术社区
主机安全
移动端开发
Oracle
IOS
快速回复
返回顶部
返回列表