Kafka 详细解读
1. Producer(生产部卷王)
职责:往 Kafka 里疯狂输出数据,KPI 是「日抛式消息海啸」
职场人设:
- 白天开会画饼,深夜写周报的奋斗逼,口头禅是「这个需求今晚必须上线!」
- 代码里的「福报」:异步发送、批量打包、压缩数据(把 100 条消息压成 1 条发),美其名曰「降本增效」
设计原理:
- 不要等待确认:默认异步发送,像极了「工作群里@老板后立刻假装下线」
- 数据分片甩锅术:通过 Key 把数据哈希到不同 Partition(相当于把需求拆成 N 个子任务甩给不同同事)
- 重试狂魔:如果某个 Broker(服务器)挂了,自动切换路线,像极了「微信找 A 同事不回复,秒切 B 同事」
必杀技:
acks=all
:要求所有副本确认后才算成功(相当于逼所有相关同事回复「收到」)- 自带缓冲区:消息先堆在内存,攒够一波再发(像极了一次性把一周的周报全发了)
2. Broker(运维部背锅侠)
职责:存数据、传数据、24小时待命,还要被甩锅
职场人设:
- 每天背黑锅的运维小哥,工位贴着「硬盘在人在,硬盘崩了提头来见」
- 信仰是「顺序写日志,随机写提桶跑路」
设计原理:
- 硬盘就是护城河:所有数据按顺序追加到日志文件(像极了把需求文档按日期堆在桌面)
- 零拷贝(Zero-Copy):直接从硬盘把数据扔给网卡,跳过内存(像极了跨部门协作不找中间人传话)
- 分区存储:一个 Topic 的数据分散在不同 Broker(相当于把项目拆成模块分给不同小组)
骚操作:
- 水位控制:如果 Consumer 消费太慢,直接拒收 Producer 的数据(像极了「需求池爆炸时对产品经理关门放狗」)
- 副本同步:Leader 把数据同步给 Follower,还要定期检查「你跟得上吗?」(像极了组长每天晨会灵魂拷问)
3. Topic(产品经理的分类癖)
职责:给数据打标签,搞「精细化运营」
职场人设:
- 每天把「用户画像」「行为日志」挂嘴边的产品经理,实际只会画脑图
- 口头禅是:「这个需求要分三个版本迭代!」
设计原理:
- 逻辑概念物理隔离:Topic 在物理上被拆成多个 Partition(相当于把「年度OKR」拆成季度 KPI)
- 生命周期管理:可以配置数据保留时间(比如7天),像极了「过期的需求文档直接扔回收站」
必杀技:
- Compact Topic:只保留每个 Key 的最新值(专治「需求反复横跳」的老板)
- 分区数决定并发度:3 个 Partition 最多 3 个 Consumer 并行消费(像极了「一个项目组最多 3 人摸鱼」)
4. Partition(技术组自闭程序员)
职责:把 Topic 拆成多个有序队列,内部严格排队,外部各自为战
职场人设:
- 坐在角落戴降噪耳机写代码的程序员,绝不参与跨部门会议
- 工位贴着「有序队列,禁止插队,违者删库跑路」
设计原理:
- Offset 编号系统:每条消息有唯一编号,像极了程序员给代码提交打 Tag
- Leader 选举:如果 Leader 挂了,从 ISR(同步副本列表)选新 Leader(像极了组长请假时组员抢话语权)
职场潜规则:
- 一个 Partition 只能被一个 Consumer 消费(同一 Group 内),像极了「一个需求只能有一个接盘侠」
- 不同 Partition 之间可以乱序,但内部必须有序(像极了「组内代码规范严格,但隔壁组随便写屎山」)
5. Consumer(测试部摸鱼党)
职责:从 Kafka 里读数据,还要假装自己很忙
职场人设:
- 每天挂着「测试环境」网页实际在刷淘宝的摸鱼达人
- 口头禅是:「这需求有 Bug,打回重做!」
设计原理:
- Pull 模式:自己控制消费速度,像极了「每天只处理 10 个 Bug,多一个就装死」
- 消费者组(Consumer Group):组内成员瓜分 Partition(像极了测试组内部推诿:「这个 Bug 归你测!」)
骚操作:
- Rebalance 风暴:当有 Consumer 加入或退出,全组停摆重新分活(像极了「新同事入职时全组开一下午欢迎会」)
- Offset 提交:可以手动提交(像极了「每天下班前才提交代码」),自动提交可能丢数据(像极了「忘记保存文档直接关电脑」)
6. ZooKeeper(HR 部监控狂)
职责:管理 Broker 元数据、Consumer Offset(早期版本)、协调选举
职场人设:
- 每天用监控摄像头对着员工的 HR,小本本记满「谁迟到谁早退」
- 口头禅是:「你的心跳呢?再不回复算你离职!」
设计原理:
- 临时节点(Ephemeral Node):Broker 和 Consumer 注册的节点是临时的,失联就删除(像极了「连续三天不交周报就踢出群聊」)
- ZAB 协议:用分布式一致性算法保证数据安全,但速度慢得像「HR 走报销流程」
职场黑话:
- Watch 机制:监听节点变化,像极了 HR 在茶水间偷听八卦
- 未来被取代:Kafka 正在用 KRaft 模式取代 ZooKeeper(像极了「公司空降新 HR 总监,旧派系瑟瑟发抖」)
7. 副本与 ISR(实习生备胎联盟)
职责:保证数据不丢,服务高可用
职场人设:
- 每天帮 Leader 干脏活的实习生,转正机会渺茫
- 口头禅是:「Leader 的文件我备份了,随时能顶上!」
设计原理:
- ISR(In-Sync Replicas):只保留能跟上 Leader 节奏的副本(像极了「只给按时交周报的实习生转正机会」)
- Unclean Leader 选举:ISR 全挂时,允许用非同步副本当 Leader(像极了「正式员工全阳了,让实习生顶班」)
职场潜规则:
- Follower 定期从 Leader 拉数据(像极了实习生偷看正式员工代码)
- Leader 挂后,ISR 里的 Follower 开启「夺权模式」(像极了组长请假时实习生抢电脑改代码)
协作大戏:一场互联网需求流水线
-
需求诞生(Producer 发消息):
产品经理(Producer)拍脑袋想出新需求 → 按 Key 哈希到某个 Partition → 扔给对应技术组(Broker) -
需求落地(Broker 存数据):
技术组把需求文档(消息)存到硬盘 → Leader 程序员(Partition Leader)同步给实习生(Follower) -
需求验收(Consumer 消费):
测试组(Consumer Group)从不同 Partition 领任务 → 摸鱼党 A 测 Partition 0,摸鱼党 B 测 Partition 1 -
容灾演习(Leader 挂了):
Leader 程序员突然猝死 → HR(ZooKeeper)发起紧急选举 → 手速最快的实习生(ISR Follower)上位 -
数据安全(副本同步):
新 Leader 疯狂同步需求文档 → 跟不上节奏的实习生被踢出 ISR(「周报写不完?明天不用来了!」)
Kafka の 职场生存哲学
- 卷王法则:吞吐量至上!批量发送、顺序写盘、零拷贝,把 CPU 和硬盘往死里榨
- 摸鱼奥义:消费者自己控制节奏,拒绝被 PUSH 需求压垮
- 甩锅宝典:数据分片(Partition)+ 多副本(Replica),谁崩了都能找人背锅
- 宫斗指南:ISR 动态调整 + Leader 选举,随时准备抢活上位