4.21-Kafka八股文

375 阅读3分钟

🧠 Kafka 八股文面试总结


1. Kafka 的核心组成有哪些?

  • Producer:消息生产者,发送消息到 Kafka。
  • Consumer:消息消费者,从 Kafka 中消费消息。
  • Broker:Kafka 服务器节点,存储消息数据。
  • Topic:消息的分类,每个 Topic 下包含多个 Partition。
  • Partition:分区,Kafka 的并发和有序性单位。
  • Consumer Group:消费者组,保证一条消息被消费一次(每个 group 中只由一个 consumer 消费)。

2. Kafka 的消息发送流程?

  1. Producer 发送消息到指定 Topic。
  2. Kafka 根据分区策略选择 Partition。
  3. 消息写入 Partition 的日志文件。
  4. Broker 将数据持久化到磁盘。
  5. Consumer 从 Partition 顺序拉取消息。

3. Kafka 如何保证高吞吐量?

  • 批量发送/拉取(Batch)
  • 顺序写磁盘(顺序写比随机写快)
  • 零拷贝(Zero-Copy)技术
  • 文件页缓存(Page Cache)
  • 异步 I/O

4. Kafka 的消息投递语义?

  • At most once(最多一次) :可能丢,但不重复。
  • At least once(至少一次) :不丢,但可能重复。
  • Exactly once(恰好一次) :Kafka 0.11+ 提供端到端精确一次语义,需开启幂等和事务。

5. Kafka 如何实现消息的顺序性?

  • 同一个 Partition 内消息是有序的。
  • 消息顺序依赖分区策略(如:按 key hash 到同一个 partition)。
  • 不同 Partition 之间无全局顺序。

6. Kafka 如何实现消费者组负载均衡?

  • 一个 Topic 的每个 Partition 在一个消费者组中只能被 一个消费者实例 消费。
  • 如果消费者数 > Partition 数,多出的消费者闲置。
  • 如果消费者宕机,Kafka 会触发 Rebalance,将其分区分配给其他消费者。

7. Kafka 的消息是如何存储的?

  • 每个 Partition 对应一个日志目录,包含一组 log segment 文件。
  • 每条消息都带有 offset(偏移量),消费者通过 offset 拉取数据。
  • Kafka 定期清理过期数据(基于时间或大小)。

8. Kafka 消息丢失和重复的原因?

  • Producer 异常或发送失败重试 → 消息重复。
  • Consumer 未提交 offset 就挂了 → 可能重复消费。
  • Broker 异常未刷盘 → 消息丢失(异步刷盘模式)。

9. Kafka 的副本机制和高可用?

  • 每个 Partition 有一个 Leader,多个 Follower
  • 所有读写都通过 Leader。
  • Follower 异步从 Leader 拉取数据并同步。
  • 若 Leader 宕机,ISR(In-Sync Replica)中选新 Leader。

10. Kafka 的 Rebalance 机制?

  • 当消费者组成员变化时(加入/宕机),Kafka 会重新分配 Partition。
  • 使用协调器(Group Coordinator)完成分区分配。
  • Rebalance 期间会有短暂不可用。
  • Kafka 提供 StickyAssignor 保持分区分配稳定性。

11. Kafka 如何实现事务和幂等?

  • 幂等 Producer(Idempotent Producer) :开启 enable.idempotence=true,保证多次发送不会重复写入。
  • 事务 Producer:使用 initTransactionsbeginTransactioncommitTransaction,配合 Consumer offset 保证 Exactly Once 语义。
  • 需使用 transactional.id 标识 Producer。

12. Kafka 和 RocketMQ 的对比?

对比项KafkaRocketMQ
开发语言Scala + JavaJava
延迟消息不支持原生延迟,需要配合定时任务实现原生支持延迟等级
顺序消息分区级顺序支持严格顺序消息
消息模型基于日志流丰富的消息模型(事务、延迟、顺序)
副本机制高级(ISR,副本控制器)支持主从,同步/异步复制
消息事务0.11+ 支持事务原生事务支持
社区生态更成熟,生态广阿里系主导,国产支持好

13. Kafka 是如何实现高可用的?

  • 多副本机制(Leader + Follower)
  • Controller 管理 Broker 状态
  • Zookeeper(早期)/ Kafka 自建 KRaft(新版本)做元数据管理
  • Consumer 自维护 Offset,不影响消费进度

14. Kafka Offset 提交方式?

  • 自动提交(enable.auto.commit=true)

    • 简单但容易丢消息或重复。
  • 手动提交(推荐)

    • 更安全,可控制提交时机。
    • commitSync():阻塞,可靠。
    • commitAsync():异步提交,性能更高但可能失败。

15. Kafka 的 Zero-Copy 是什么?

  • 消息从磁盘直接通过 DMA 拷贝到 Socket 缓冲区,绕过用户态。
  • 减少上下文切换,提高吞吐。