P95 简述 Kafka 架构设计
面试题:Kafka 的整体架构是什么?Topic、Partition、Broker 的关系?
1. 核心概念
text
Producer → Broker(Kafka 集群节点)
├─ Topic(逻辑主题)
│ └─ Partition(物理分片,每个分区有序)
│ └─ 消息按 offset 顺序存储
└─ Consumer(消费组消费分区)- Topic:消息分类;
- Partition:一个 Topic 分成多个分区,分区内有序、分区之间无序;
- Offset:消息在分区内的序号,消费者记录消费位置;
- Consumer Group:组内每个分区只被一个消费者消费(并行度 = 分区数);
- 副本(Replica):Leader 负责读写,Follower 同步复制,故障自动切换。
2. 消息流转
text
① Producer 按 key 哈希/轮询选择分区发送
② Broker 把消息追加到分区日志文件(顺序写磁盘,快)
③ 副本同步(ISR)
④ Consumer 从分区按 offset 拉取(pull)消费3. 为什么 Kafka 快
- 顺序写磁盘(追加日志,机械盘也能接近内存速度);
- PageCache 缓存热数据;
- 零拷贝(sendfile)减少拷贝;
- 批量:生产者批量发送、消费者批量拉取;
- 分区并行 + 水平扩展。
4. 高可用与一致性
- ISR(In-Sync Replicas):与 Leader 保持同步的副本集合;
acks参数:0(不等确认)/1(Leader 确认)/all(ISR 全部确认,最安全);- Leader 挂掉从 ISR 中选举新 Leader;
- 引入 ZooKeeper/KRaft 做元数据管理和 Leader 选举。
5. 加分点
- 说清"分区是并行与有序的取舍":要全局有序只能单分区;
- 提到消费组再均衡(Rebalance)和 offset 提交(自动/手动);
- 追问"为什么不支持 push":pull 让消费者自己控制速率,避免压垮慢消费者;
- 提到日志保留策略(segment 滚动、按时间/大小清理)。
一句话总结
Kafka 架构 = Producer + Broker(Topic → Partition → 日志文件) + Consumer Group;分区实现并行与扩展,副本 + ISR 保证高可用,顺序写 + 零拷贝 + 批量带来高性能,消费端按 offset 拉取。