Kafka 常见面试题

返回 面试 · MQ 总览 消息队列常见面试题

详解 Kafka消息队列


核心架构

概念说明
Topic逻辑主题
Partition物理分片;并行与顺序的基本单位
Offset分区内单调递增;消费进度
Broker存储与服务节点
Leader / Follower分区 Leader 读写;Follower 同步
ISR与 Leader 同步在阈值内的副本集合
Consumer Group组内一个分区只分给一个消费者
KRaft内置 Raft 管理元数据;4.0+ 无 ZooKeeper
Consumer Group A          Consumer Group B
  C0 → P0                   C0 → P0,P1,P2(独立消费)
  C1 → P1
  C2 → P2

规则:同组消费者数 ≤ 分区数;多则空闲。不同组互不影响


为什么 Kafka 快

机制说明
顺序写磁盘追加日志,顺序 I/O 接近内存带宽
Page Cache依赖 OS 页缓存,Broker 少拷贝
Zero Copy消费端 sendfile 直传网卡
批量Producer batch.sizelinger.ms
分区并行多 Partition 读写
Pull 模型消费者按能力拉,避免推爆慢消费者

存储与回溯

  • 每个 Partition = 追加写日志 + Log Segment 滚动
  • retention.ms / retention.bytes 过期删除
  • Compact Topic:同 key 保留最新(配置、CDC 状态)
  • Offset 存 __consumer_offsets

生产者可靠性

acks含义风险
0不等确认可能丢
1Leader 确认Leader 宕机未同步可能丢
all / -1ISR 全部确认最可靠;配合 min.insync.replicas
acks=all
retries=3
enable.idempotence=true   # 幂等 Producer(单分区有序去重)

事务 Producer:跨分区原子写 + 与消费 EOSread_committed)。


消费语义

语义Kafka 实现
At Most OncecommitSync offset 再处理
At Least Once先处理再提交 offset(默认常见
Exactly Once幂等消费 + 事务 + read_committed

手动提交enable.auto.commit=false,业务成功后 commitSync


Rebalance(再均衡)

触发:消费者入退组、心跳/poll 超时、分区数变、订阅变。

过程:暂停消费 → 重新分配分区 → 恢复(STW 式,影响延迟)。

优化cooperative-sticky 增量协议;静态成员 group.instance.id 减少重启 rebalance。

反模式poll 循环内长时间 DB/HTTP → 触发 max.poll.interval.ms 被踢出组。


顺序与 Key

  • 分区内有序;跨分区无序
  • 相同 key → 同一分区(默认 murmur2(key) % partitions
  • 全局有序:单分区(吞吐受限)

副本与 Leader 选举

Producer ──acks=all──► Leader
                           ├── Follower (ISR)
                           └── Follower (非 ISR,落后多)
场景说明
Follower 落后踢出 ISR
Leader 宕机ISR 选新 Leader
ISR 为空unclean.leader.election.enable=false(生产推荐)避免丢数据

堆积(Lag)排查

  1. kafka-consumer-groups.sh --describeLAG
  2. 消费者是否存活、是否处理过慢
  3. 扩容消费者(≤ 分区数)或 增加分区(需规划 key)
  4. 临时限流生产、非核心消费者降级

Kafka vs RabbitMQ(简)

KafkaRabbitMQ
模型日志 / Topic队列 / Exchange 路由
回溯offset 任意重放消费即删(可 TTL)
吞吐极高
延迟ms更低(μs 级)
适用流、日志、CDC任务、复杂路由

常见面试题

Q:Consumer 数量大于分区数?
A:多余的空闲,不消费。

Q:如何保证消息不丢?
A:acks=all + min.insync.replicas≥2 + 消费处理完再提交 offset + 副本持久化。

Q:重复消费怎么处理?
A:业务幂等;Kafka 事务 + 幂等 Producer 只解决生产侧重复。

Q:KRaft 是什么?
A:用内置 Raft quorum 存元数据,去掉 ZooKeeper,简化运维、支持更大规模分区。


相关笔记