Kafka 八股题库
这份题库重点是:让你能把 Kafka 讲成你项目里的异步解耦、高峰削峰、实时链路和消费者治理工具,而不是“会发消息”。
一、Kafka 面试里你的最佳定位
你最稳的说法是:
Kafka 在我项目里主要用在推广 ROI 这条线,承担原始事件流转、异步解耦、实时消费和高峰削峰。我的理解重点不是会不会用,而是如何保证链路稳定、幂等、可追踪。
二、高频题
1. Kafka 的核心概念有哪些
必会
- topic
- partition
- broker
- producer
- consumer
- consumer group
- offset
标准理解
Kafka 本质上是一个高吞吐分布式消息系统,适合做日志流、事件流和异步解耦。
2. 为什么 Kafka 吞吐高
标准回答
- 顺序写磁盘
- 批量发送 / 批量拉取
- 零拷贝
- 分区并行
- broker 设计面向吞吐
3. partition 的作用是什么
标准回答
partition 是 Kafka 并行和扩展的基本单位。一个 topic 可以拆成多个 partition,从而让生产和消费并行进行。
常见追问:顺序性怎么保证
Kafka 只能保证单 partition 内有序,跨 partition 不保证全局有序。
4. consumer group 是什么
标准回答
同一个 consumer group 内,同一时刻一个 partition 只能被一个 consumer 消费。这样既能实现并行消费,也能避免同组内重复消费。
5. Kafka 为什么会重复消费
标准回答
因为 Kafka 默认更偏 at-least-once 语义。常见场景:
- 业务处理成功但 offset 还没提交
- 消费者重启
- rebalance
- 提交失败
面试更稳的说法
Kafka 的重点不是“绝不重复”,而是消费端必须做好幂等。
6. 如何保证幂等消费
标准回答
常见做法:
- 业务唯一键
- Redis / DB 幂等校验
- 状态机
- 去重表
项目里怎么讲
像行为回传、激活归因、支付类事件,如果 Kafka 消费端不做幂等,重复消费一定会把状态打乱。
7. Kafka 消费失败怎么处理
标准回答
常见策略:
- 立即重试
- 指数退避
- 落错误队列 / 死信队列
- 记录失败日志
- 人工补偿
面试更稳的说法
重试要考虑幂等和故障放大,不能一味重试。
8. 消息积压怎么办
标准回答
先看积压原因:
- 消费速度不够
- 下游依赖慢
- 分区不合理
- 某类消息异常重试过多
再决定:
- 扩 consumer
- 扩 partition
- 优化消费逻辑
- 限流 / 降级
- 拆分 topic
9. 如何保证顺序消费
标准回答
如果业务强依赖顺序,关键数据应路由到同一个 partition,并确保该 partition 在同组内由一个 consumer 顺序处理。
面试更稳的说法
真正需要强顺序的业务不要随便跨 partition 乱分,否则顺序语义就丢了。
10. Kafka 和 RabbitMQ 的核心区别
标准回答
- Kafka 更偏高吞吐日志流 / 事件流
- RabbitMQ 更偏灵活路由、低延迟业务消息、复杂消息模型
面试更稳的说法
Kafka 更像大吞吐事件平台,RabbitMQ 更像传统消息中间件。
11. Kafka 适合什么场景
适合
- 埋点
- 日志流
- 事件流
- 行为数据
- 异步解耦
- 高吞吐消费
不一定适合
- 特别复杂的消息路由
- 极低延迟的小规模业务通知
三、项目里你最适合讲的 Kafka 场景
1. 推广 ROI 链路
- 点击数据流转
- 动态落地页埋点
- 行为事件处理
- 回传链路解耦
2. 为什么这里要用 Kafka
因为:
- 主流程不能被长链路拖死
- 高峰期吞吐大
- 需要重试和积压容忍
- 生产与消费要解耦
3. 你能展示的能力
- 并不是会发消息就够
- 你会考虑顺序、幂等、积压、重试、告警和排障
四、常见追问
追问 1:你项目里 Kafka 放在哪层
你可以答:
Kafka 在我项目里属于事件流转层,前面接原始事件,后面接消费者和处理服务,把主流程和长链路拆开。
追问 2:为什么不用同步处理
你可以答:
因为高峰期吞吐大,而且回传、统计、报表刷新这些不适合同步压在主链路里,否则稳定性会明显变差。
追问 3:Kafka 会不会丢消息
你可以答:
理论上要看 acks、副本和 broker 配置,但业务层即使有 Kafka 也不能完全指望中间件保证一切,关键还是要有幂等、日志和补偿机制。
五、你复习 Kafka 最该背的 10 个点
- topic / partition / consumer group
- Kafka 为什么吞吐高
- partition 顺序性
- offset
- 重复消费
- 幂等消费
- 消费失败处理
- 消息积压
- Kafka 和 RabbitMQ 区别
- 项目里为什么要用 Kafka