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 个点

  1. topic / partition / consumer group
  2. Kafka 为什么吞吐高
  3. partition 顺序性
  4. offset
  5. 重复消费
  6. 幂等消费
  7. 消费失败处理
  8. 消息积压
  9. Kafka 和 RabbitMQ 区别
  10. 项目里为什么要用 Kafka