Kafka 面试题集:从六个问题收口
属于 S3 Kafka 深入 · 收口篇 上一篇:可靠性与积压
Kafka 的高频问题,每题练到连续追问三层不卡壳。这一版把前面几篇的细节(HW/LEO、ISR、零拷贝、幂等边界)都串进追问里。
Q1:Kafka 为什么吞吐高?
三根支柱:顺序写(追加写是顺序 IO,磁盘顺序写接近内存)、零拷贝(sendfile 跳过用户空间)、页缓存(读写走内存)。加上分区提供并行度。
追问①:零拷贝省了多少? 传统 read+write 是 4 次拷贝 + 4 次上下文切换;sendfile 是 2 次拷贝(全程 DMA)+ 2 次切换,数据不经过用户空间。追问②:顺序写为什么比随机写快? 顺序写不需要寻道,像"从最后一页接着写",随机写要频繁寻道。
Q2:如何保证消息不丢?
三道闸门:生产端 acks=-1 + retries + min.insync.replicas>=2;Broker 端副本>=3 + unclean=false;消费端手动提交、先处理后提交。
追问①:acks=-1 就绝对不丢吗? 不是,ISR 只剩 Leader 时退化成 1,所以必须配 min.insync.replicas>=2。追问②:HW 和 LEO 是什么关系? LEO 是副本日志末尾,HW 是"所有 ISR 副本中最小的 LEO",消费者只能读到 HW 之前的数据——保证读到的都是多数副本确认过的。
Q3:如何保证不重复消费?
靠消费端幂等消化:唯一键、去重表、状态机。
追问①:幂等生产者能防重吗? 只能防"重试导致的重复"(PID+sequence),且仅单分区单会话内;跨会话要事务。追问②:exactly-once 怎么实现? 幂等生产者 + 事务 + 消费幂等三件套。
Q4:如何保证顺序?
Kafka 只保证单分区有序。同 key 哈希进同一分区 + 分区级串行消费。
追问①:为什么同 key 能有序? key 相同则哈希到同一分区,分区内天然有序。追问②:消费者多线程处理会乱序吗? 会,所以要每分区一个处理协程,分区内串行。
Q5:rebalance 是什么,有什么危害?
消费组内成员/分区变化时重新分配分区的过程,像"班级重新排座位"。危害是期间组内所有消费者停止消费(STW)。
追问①:哪些情况触发? 实例加入退出、分区数变化、处理超时超过 max.poll.interval.ms 被踢。追问②:怎么减少? 调大超时参数、静态成员(group.instance.id)、保持实例稳定。
Q6:消息积压怎么处理?
看 lag 定位 → 扩容消费者(上限=分区数)→ 优化消费逻辑 → 极端用临时 topic 转储并行消化。
追问①:消费者扩容上限为什么是分区数? 一个分区只能被组内一个消费者消费,实例多了空闲。追问②:lag 是什么? 消费落后量,即"生产位置 - 消费位置",持续增大就是积压信号。
自测清单
六题盖住答案,能讲出推理过程 + 追问全答上(尤其 HW/LEO、min.insync.replicas、幂等边界这三个易漏点),S3 Kafka 就过关了。进入 S4 Go 微服务。