Kafka

Kafka单机是怎么实现高吞吐量的?
Apache Kafka 高吞吐量主要来自以下几个底层机制:
1️⃣ 顺序写磁盘(基础)
- Kafka 采用 append-only 日志
- 顺序写避免了磁盘寻址开销
- 性能接近内存写
2️⃣ Page Cache(关键点,很多人漏)
- Kafka 写入先进入操作系统的 Page Cache
- 实际刷盘是异步的
- 本质:用内存当缓冲区
3️⃣ 批量处理(batch)
- Producer 不是一条一条发,而是批量发送
- Broker 也是批量写入
- 减少网络和 IO 次数
4️⃣ 零拷贝(zero-copy)
- Kafka 使用 sendfile 等技术
- 数据从磁盘到网卡不经过用户态拷贝
- 极大降低 CPU 开销
5️⃣ 分区并行(你刚才提到的点)
- 多 Partition 并行读写
- 提升整体吞吐上限
数据流动
1️⃣ Producer 将消息发送到 Topic
2️⃣ Topic 被划分为多个 Partition,分布在不同 Broker 上
3️⃣ 每个 Partition 有一个 Leader 和多个 Follower 副本(通过 ISR 机制维护)
4️⃣ Producer 写入 Leader Partition
5️⃣ Consumer 以 Consumer Group 形式从 Partition 主动拉取数据
关键补充一句(加分点)
Kafka 的核心特点是:数据写入 Partition 后按顺序追加日志,并通过 offset 控制消费进度。
常见题目
Partition 是怎么分配到 Broker 的?
在 Kafka 集群中:
Partition 的分配是由 Kafka Controller 负责的,它会根据负载均衡策略,将不同 Partition 分配到不同 Broker 上。
具体过程:
1️⃣ Topic 创建时会指定 Partition 数量
2️⃣ Kafka Controller(或 KRaft 模式下的 Controller)负责分配
3️⃣ 每个 Partition 会被分配到某个 Broker 作为 Leader
4️⃣ 同时副本(Replica)会分布到其他 Broker
Kafka 是怎么选出 Partition Leader 的?如果 Leader 挂了会发生什么?
面试标准答案(你可以背)
Kafka 中 Partition Leader 的选举发生在 ISR(同步副本集合)中,当 Leader 挂掉后,Kafka Controller 会从 ISR 中选出一个新的 Leader 来继续提供服务。在旧版本中依赖 Zookeeper 进行协调,而在新版本的 KRaft 模式中由 Kafka 自身的 Controller 负责选举与元数据管理。
❗如果 ISR 里只剩 Leader 一个副本,会发生什么?
面试标准答案(你可以背)
当 Kafka 中 ISR 只剩 Leader 时,如果 Leader 挂掉,系统会触发 Leader 选举机制。如果允许 unclean leader election,则可能从非同步副本中选出新的 Leader,从而带来数据丢失风险;如果禁止该配置,则该 Partition 会暂时不可用,直到 ISR 恢复或 Leader 重新选举成功。Kafka 不会进入无限重试状态,而是通过集群协调机制快速完成状态切换。
Kafka 为什么要设计 ISR,而不是“全部副本同步成功才算成功”?
面试标准答案(你可以直接背)
Kafka 使用 ISR(In-Sync Replicas)机制,而不是等待所有副本同步成功,是为了在一致性和吞吐量之间做权衡。如果等待所有副本,会受到最慢副本的影响,导致系统吞吐量大幅下降;而 ISR 只维护与 Leader 同步的副本集合,在保证数据可靠性的同时避免慢副本拖慢整体性能,从而实现高吞吐和可用性的平衡。
Kafka 是如何避免 ISR 中的副本“假同步”(其实已经落后但还在 ISR 里)?
ISR 的真实机制总结(面试核心)
你可以这样说:
Kafka 通过持续监控副本与 Leader 的 offset 差距以及延迟时间来判断副本是否健康。如果副本长期无法跟上 Leader 的进度,会被从 ISR 中移除,从而保证 ISR 中的副本都是与 Leader 保持同步的“健康副本”。
Kafka 为什么不用 Raft/Paxos 做强一致性,而是用 ISR?
标准答案(面试可以直接说)
Raft 和 Paxos 是用于强一致性共识的算法,通常用于需要严格一致的元数据系统。而 Kafka 的设计目标是高吞吐的流式数据系统,它采用 ISR 机制来在一致性和性能之间做折中,不追求强一致性,而是通过“同步副本集合”保证足够的可靠性,从而换取更高的吞吐和更低的延迟。

浙公网安备 33010602011771号