面试高频 30 题
使用说明
本题集覆盖校招和社招中 Apache Kafka 的高频考点。每道题标注星级(★ 基础 / ★★ 进阶 / ★★★ 专家),★★★ 题代表候选人具备生产级 Kafka 经验。
基础概念(★★★ 高频)
1. Kafka 是什么?为什么叫"分布式流处理平台"?★
答题要点:Kafka 不是单纯的消息队列,是以 Append-Only Log 为核心的分布式、分区化、多副本的流处理平台。三个核心能力:消息发布订阅(Pub/Sub)、持久化存储、流处理。
2. Topic 和 Partition 的关系?为什么需要分区?★
答题要点:Topic 是逻辑概念,Partition 是物理存储单元。分区是为了并行:并行写入(多个 Producer 写不同分区)、并行存储(多 Broker 分布存储)、并行消费(同消费组内 Consumer 并行消费)。
3. Kafka 如何保证消息顺序?★★
答题要点:分区内严格顺序。全局顺序需单分区 + max.in.flight.requests.per.connection=1 + enable.idempotence=true。多分区无法保证全局顺序。
4. 什么是 ISR?为什么需要 ISR 机制?★★
答题要点:In-Sync Replicas——与 Leader 保持同步的副本集合。ISR 提供动态权衡:副本同步延迟在 replica.lag.time.max.ms 内即保持在 ISR。避免少数慢副本阻塞所有写入。
生产者(★★ 适中)
5. Producer 发送消息的完整流程?★
答题要点:send() → Serializer → Partitioner → RecordAccumulator → Sender 线程 → Broker。两个独立线程:应用线程负责前 3 步,Sender 线程负责网络发送。
6. acks=all 一定不丢数据吗?★★
答题要点:不保证。陷阱:min.insync.replicas=1 时 acks=all 退化为 acks=1;所有 ISR 磁盘同时损坏时仍然丢。需要最小存活 ISR 数 > 1 + 磁盘容灾。
7. 幂等性 Producer 的原理?★★
答题要点:给每个 Producer 分配 Producer ID,每条消息带 <PID, SequenceNumber>。Broker 对每个 Partition 记录最近 5 个 SeqNum,检测重复后丢弃。
8. Producer 的重试机制如何导致消息重复?★★
答题要点:Broker 已写入但 ACK 网络丢失 → Producer 重试 → 消息被写入两次。解决方案:enable.idempotence=true(幂等去重)或 transactional.id(事务)。
消费者(★★ 适中)
9. Consumer Group 中的 Rebalance 是什么?触发时机?★
答题要点:消费组内分区重新分配的过程。触发:Consumer 加入/离开、分区数变更、Topic 被订阅/取消订阅。Rebalance 期间消费组暂停消费。
10. Range 和 RoundRobin 分配策略的区别?★
答题要点:Range 按分区号范围分配(可能导致数据倾斜);RoundRobin 轮询分配(均匀,但所有 Consumer 必须订阅相同 Topic)。3.x 推荐 Cooperative Sticky(增量重分配)。
11. 自动提交和手动提交 Offset 的选择?★
答题要点:自动提交(enable.auto.commit=true)可能漏消费(提交后还没处理就崩溃)。手动提交能精确控制 at-least-once。生产环境推荐手动提交。
12. Consumer 多线程消费模型有哪些?★★
答题要点:① 多 Consumer 实例(最简单);② 单 Consumer + 多 Worker 线程(注意 Offset 提交顺序);③ 按分区手动分配 + 独占线程(最灵活,但失去 Rebalance 自动管理)。
Broker 与副本(★★★ 高频)
13. Controller 的作用?KRaft 模式与 Zookeeper 模式的区别?★★
答题要点:Controller 管理分区 Leader 选举、Broker 上下线、元数据分发。KRaft 模式用 Raft 共识替代 ZK,部署简化 + 元数据一致性强 + 支持百万分区级别。
14. Kafka 如何选举新 Leader?★★
答题要点:从该分区的 ISR 中选一个。优先选 AR 列表中的第一个(Preferred Leader)。unclean.leader.election.enable=true 时允许选非 ISR 副本(有丢数据风险)。
15. HW(High Watermark)和 LEO(Log End Offset)的作用?★★★
答题要点:HW 是消费者可见的最大 Offset(所有 ISR 副本都已确认);LEO 是副本的下一条消息 Offset。HW ≤ LEO。Leader 故障后,新 Leader 的 HW 保证不丢失已提交消息。
16. Leader Epoch 解决什么问题?★★★
答题要点:解决旧 Leader 恢复后的日志截断判断问题。每个 Leader 任期有一个 Epoch,Follower 同步时带上 Epoch → Leader 知道哪些消息在哪个 Epoch 开始写入 → 避免误截断已提交消息。
存储与性能(★★★ 高频)
17. Kafka 为什么这么快?★★
答题要点:① 顺序 I/O(追加写);② 零拷贝(sendfile);③ Page Cache 依赖(不维护应用层缓存);④ 批量+压缩(网络效率);⑤ 分区并行。
18. Segment 是什么?为什么需要 Segment?★
答题要点:Partition 的物理存储单元,按大小或时间切分。好处:方便过期删除(整段删除)、方便定位(二分查找+稀疏索引)、避免单文件过大。
19. Log Compaction 和 Log Deletion 的区别?★★
答题要点:Deletion 按时间/大小删除(适合流数据);Compaction 保留每个 Key 的最新值(适合状态数据)。Compact 不影响 Consumer 读取现有消息。
20. 零拷贝(Zero Copy)的原理?★★
答题要点:sendfile() 系统调用 → 数据从 Page Cache 直接 DMA 到网卡,不走用户态,减少 2 次 CPU 拷贝和 2 次上下文切换。
运维(★★★ 高频)
21. 如何监控 Kafka?核心指标是什么?★
答题要点:UnderReplicatedPartitions、ActiveControllerCount、Consumer Group Lag、磁盘使用率、请求延迟 P99。使用 JMX + Prometheus + Grafana。
22. 消费 Lag 飙升如何排查?★★
答题要点:① 确认 Lag 是否集中在某几个分区(分区倾斜或单 Consumer 慢);② 检查 Consumer 是否存活(频繁 Rebalance?);③ 检查 Consumer 处理速度(max.poll.records 太大?处理逻辑慢?);④ Producer 写入是否突增。
23. 分区数如何确定?★★
答题要点:分区数 = max(目标吞吐 / 单分区吞吐, Consumer 数量)。单分区上限 ~10-20 MB/s(根据硬件)。经验:先设 12-24,上线后根据监控调整。
24. unclean.leader.election.enable 开还是关?★★
答题要点:强烈建议 false(生产默认)。开启意味着"宁可丢数据也不让分区不可用"。除非是日志类容忍数据丢失的场景,否则永远关闭。
事务与 Exactly-Once(★★★ 专家级)
25. Kafka 事务的保证范围?★★★
答题要点:原子写入多分区 + Consumer 的 "read- process-write" 原子性。但不跨外部系统(数据库 + Kafka 一起不能算一个事务)。
26. Exactly-Once 语义(EOS)如何实现?★★★
答题要点:Power=幂等(单分区去重)+ Transactions(跨分区原子性)+ Consumer 的 read_committed 模式(只读已提交的事务消息)。本质是 at-least-once + 去重 = effectively exactly-once。
架构设计(★★★ 专家级)
27. 如何保证 Kafka 集群的高可用?★★
答题要点:① replication.factor ≥ 3;② min.insync.replicas ≥ 2;③ Controller 冗余(KRaft 3 节点起);④ 跨机架/可用区部署;⑤ MirrorMaker 2 跨集群容灾。
28. Kafka 的"数据回滚"能力体现在哪?★★
答题要点:(由于副本同步未完全确认时 Leader 故障)新 Leader 可能截断旧 Leader 未完全同步的日志。Leader Epoch 机制在 KRaft 模式下防止回滚到错误状态。消费者通过 Offset 重置可以回溯消费。
29. 为什么不把消息直接发给 Consumer,而是要经过 Broker?★
答题要点:解耦 → 生产者不知道消费者是谁;持久化 → 消费者离线时消息不丢;多订阅 → 多个消费组独立消费同一数据流;削峰填谷 → 消费速率不必匹配生产速率。
30. 如果让你设计一个类似 Kafka 的系统,你会关注哪些点?★★★
答题要点:① 存储引擎:顺序追加 + 分段;② 分区模型:水平扩展;③ 副本协议:ISR vs Quorum;④ 元数据:一致性协议(Raft);⑤ 网络 I/O:零拷贝 + 批量;⑥ 消费者模型:Pull + Offset 管理。核心权衡:可靠性与延迟、一致性与可用性。