Kafka 面试高频题(原理辨析・背诵版)

Kafka 面试高频题(原理辨析·背诵版)

覆盖你要的 HW&LEO、ISR、分区策略、零拷贝&mmap,附高频扩展题,全是面试常问核心


一、核心概念辨析(必问)

1. HW(高水位)和 LEO(日志末端偏移)的区别?

【面试题】解释 HW、LEO,以及两者的作用和差异
答案

  • LEO(Log End Offset):副本(Leader/Follower)本地日志下一条待写入的偏移量,代表副本自身最新写入位置。
  • HW(High Watermark)所有 ISR 副本 LEO 的最小值,代表已成功提交、消费者可读取的最大偏移量。
  • 关键区别
    1. LEO 是单副本维度,HW 是分区(ISR集合)维度;
    2. 消费者只能读 HW 之前的消息,HW 后未同步完成的消息不可见;
    3. Follower 同步追上 Leader LEO,HW 才会推进。

2. ISR 是什么?机制&作用?为什么只从 ISR 选 Leader?

【面试题】ISR 全称、判定规则、核心作用
答案

  • ISR(In-Sync Replicas):与 Leader 保持同步的副本集合(包含 Leader 自身)。
  • 同步判定:Follower 在 replica.lag.time.max.ms 内能追上 Leader,就留在 ISR;超时则踢出。
  • 核心作用:保证数据一致性 + 快速故障转移。
  • 只从 ISR 选 Leader 的原因:ISR 内副本数据是最新、完整的,非ISR副本数据滞后,选举会导致数据丢失/不一致。

3. 分区(Partition)核心作用?单分区/全局有序性?

答案

  • 作用:水平扩展、并行读写,是 Kafka 高吞吐基础;副本以分区为单位冗余。
  • 有序性:单分区内严格 FIFO 有序,跨分区全局无序(要全局有序需 Topic 只设1个分区)。

二、生产端高频(ACK、分区策略、可靠性)

1. acks 三种配置区别?场景选型?

答案

  • acks=0:生产者发完不等待确认,最高吞吐、最低可靠(Leader宕机消息丢失)。
  • acks=1:等待 Leader 本地落盘即确认,折中(Leader宕机、Follower未同步会丢消息)。
  • acks=all/-1:等待所有 ISR 副本同步完成最高可靠(性能略低)。
  • 选型:金融/支付用 all,日志采集/监控用 01

2. 生产者分区策略有哪些?怎么选型?

答案

  • 轮询(RoundRobin):默认,消息均匀分布所有分区,无 Key 场景适用。
  • 哈希(Default):按 Key 哈希取模分区,同 Key 消息进入同一分区(保证单分区有序)。
  • 粘性分区(Sticky):批量发送时尽量发往同一分区,提升批量效率。
  • 自定义:实现 Partitioner 接口,按业务规则路由。
  • 选型:需要 Key 有序 → 哈希;纯吞吐、无顺序要求 → 轮询/粘性。

3. Kafka 幂等生产者 & 事务原理?解决什么问题?

答案

  • 幂等:PID(生产者ID)+ 分区 + 序列号,Broker 去重,解决重复发送、网络重传导致的消息重复。
  • 事务:跨分区/会话原子性写入,要么全部提交,要么全部回滚,配合幂等实现Exactly-once(精确一次) 语义。

三、消费端高频(Rebalance、消费语义、Offset)

1. 消费者组(Consumer Group)核心规则?Rebalance 触发条件?

答案

  • 规则:一个分区只能被组内一个消费者消费;消费者数 ≤ 分区数(多了空闲)。
  • Rebalance 触发:消费者上下线、Topic 分区增减、订阅关系变化。
  • 问题:重平衡期间消费者不可读,频繁重平衡会导致性能暴跌。

2. 三种消费语义(At-most/At-least/Exactly-once)?

答案

  • 最多一次(At-most-once):先提交 Offset,再处理消息 → 可能丢消息,无重复。
  • 至少一次(At-least-once):先处理消息,再提交 Offset → 不丢消息,可能重复(需业务幂等)。
  • 精确一次(Exactly-once):生产者幂等 + 事务 + 消费者事务提交 Offset → 不丢不重,最强语义。

3. Offset 存哪里?自动/手动提交区别?

答案

  • 存储:新版默认存内部主题 __consumer_offsets(弃用 ZK)。
  • 自动提交:定时提交,简单但不可控,易丢/重消息。
  • 手动提交:commitSync(同步阻塞)/commitAsync(异步非阻塞),业务可控,生产环境推荐。

四、高性能原理(零拷贝、mmap、顺序写)

1. 零拷贝是什么?和传统拷贝区别?Kafka 为什么用它?

答案

  • 零拷贝(sendfile):数据直接从内核页缓存 → Socket 缓冲区,跳过用户态拷贝,减少CPU开销。
  • 传统拷贝:磁盘→内核缓存→用户缓存→Socket缓存(4次拷贝、2次上下文切换)。
  • 零拷贝:磁盘→内核缓存→Socket(2次拷贝、1次切换),读性能大幅提升

2. 零拷贝 和 mmap(内存映射)的区别?Kafka 如何用?

【高频辨析题】
答案

特性 mmap 零拷贝(sendfile)
作用 把磁盘文件映射到进程地址空间 内核态直接转发数据到网卡
适用场景 Kafka 索引文件(.index/.timeindex) Kafka 消息日志(.log)读取
拷贝次数 减少用户态拷贝,但仍需CPU参与 完全无CPU拷贝,纯DMA传输
安全/限制 映射文件过大可能OOM 适合大文件流式读取,无内存压力
  • 总结:mmap 用于索引加速,零拷贝用于消息读取,两者配合实现高性能。

3. Kafka 为什么快?核心高性能设计(必背总结)

答案

  1. 分区并行,分布式读写;
  2. 顺序追加写,避免磁盘随机IO瓶颈;
  3. 依赖操作系统 PageCache,异步刷盘;
  4. 生产者批量发送+消息压缩
  5. 消费者零拷贝读取;
  6. 拉模式(Consumer主动拉),适配不同消费速率。

五、高可用机制(副本、Leader选举、故障恢复)

1. Leader/Follower 职责?Leader 宕机如何选举?

答案

  • Leader:处理所有读写请求;
  • Follower:只同步数据,不对外提供服务。
  • 选举规则:从 ISR 中选 LEO 最大的 Follower 为新 Leader,保证数据最新、不丢失。

2. 旧 Leader 恢复后会怎样?如何保证数据一致?

答案
旧Leader恢复后变为Follower,截断自己超出 HW 的数据,再同步新Leader数据,避免数据不一致。


六、架构对比(ZK vs KRaft)

1. 传统 ZK 架构 vs KRaft 新架构(去ZK)区别?

答案

  • ZK 架构:依赖外部 ZK 存元数据、选Controller,部署重、网络抖动影响大。
  • KRaft 架构:内置 Raft 协议 管理元数据,自选举Controller,无外部依赖,部署简单、延迟更低、扩展性更好(Kafka 2.8+ 主推)。

七、一句话高频速答(面试收尾/口头回答)

  1. Kafka 本质:分布式追加日志系统,靠分区扩吞吐、副本保高可用。
  2. 数据可靠核心:ISR + HW + acks=all
  3. 高性能核心:顺序写 + PageCache + 零拷贝 + 批量压缩
  4. 消费核心:消费者组 + 单分区独占 + Offset 提交

需要我把这些题再压缩成1页纸极简背诵版(只留题干+关键词)吗?

posted @ 2026-02-09 11:33  wuyingchun1987  阅读(0)  评论(0)    收藏  举报