Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Kafka 经典问题

Kafka 的问题集中在:一致性、顺序性、延迟、积压、重平衡、磁盘、网络、运维复杂度。

一、Kafka 开发侧常见问题(类似 Redis 缓存问题)

1️⃣ 消息丢失问题(最经典)

🔴 场景

  • Producer 已发送,但 Consumer 消费不到
  • Broker 崩溃后消息消失

🔍 原因

  • acks=1 / 0
  • ISR 不够
  • 自动提交 offset
  • Leader 切换
  • unclean leader election

✅ 解决方案(标准答案)

acks=all
enable.idempotence=true
min.insync.replicas=2
replication.factor=3
enable.auto.commit=false
unclean.leader.election.enable=false

👉 Kafka 默认不保证不丢消息,必须靠配置 + 规范

2️⃣ 消息重复问题(Kafka 天生存在)

🔴 场景

  • Consumer 重启
  • Rebalance
  • 手动重试

🔍 原因

  • Offset 提交失败
  • 业务未实现幂等

✅ 解决方案

  • Producer:幂等性 / 事务
  • Consumer:业务幂等(唯一键、去重表)

👉 Kafka 的设计目标是“不丢”,不是“不重”

3️⃣ 消息顺序性问题

🔴 场景

  • 同一业务消息乱序
  • 扣款、状态流转异常

🔍 原因

  • 多分区
  • 一个分区多个 consumer 线程
  • 重平衡

✅ 解决方案

  • 同一 key -> 同一 partition
  • 一个 partition -> 一个消费线程
  • 不在业务中乱并发

4️⃣ 消息延迟问题(Kafka ≠ 实时系统)

🔴 场景

  • 写入后几秒甚至几十秒才消费
  • 高峰期延迟暴涨

🔍 原因

  • linger.ms
  • batch.size 太大
  • Page Cache 压力
  • Consumer poll 不及时

✅ 解决方案

  • 合理配置 linger.ms
  • 控制 batch
  • 监控 consumer lag
  • IO 独立磁盘

5️⃣ 消息积压(Lag)问题(极高频)

🔴 场景

  • Consumer lag 不断上涨
  • 消费不过来

🔍 原因

  • 消费能力 < 生产能力
  • 分区不足
  • 单条消息处理太慢

✅ 解决方案

  • 增加 Consumer 实例
  • 增加分区数
  • 多线程消费
  • 降低 Producer 写入速率

6️⃣ 重平衡风暴(Rebalance Storm)

🔴 场景

  • Consumer 经常重平衡
  • 消费频繁暂停

🔍 原因

  • Consumer 频繁重启
  • poll 超时
  • GC STW
  • session.timeout.ms 太小

✅ 解决方案

  • Cooperative Rebalance
  • 调大 session / poll interval
  • 避免容器频繁重启

二、Kafka 运维侧常见问题(比 Redis 更复杂)

7️⃣ 磁盘问题(Kafka 的命根子)

🔴 场景

  • Broker 磁盘满
  • IO 等待高
  • 写入变慢

🔍 原因

  • 数据保留时间过长
  • 分区过多
  • segment 太小
  • 磁盘混用

✅ 解决方案

  • 独立数据盘
  • 设置 retention
  • 监控磁盘水位
  • 扩容 broker

8️⃣ 副本不同步(Under Replicated)

🔴 场景

UnderReplicatedPartitions > 0

🔍 原因

  • 网络慢
  • IO 瓶颈
  • follower 拉取慢

✅ 解决方案

  • 查 broker IO
  • 检查网络
  • 扩容 broker
  • 减少分区

9️⃣ Leader 频繁切换

🔴 场景

  • topic leader 不稳定
  • 消费中断

🔍 原因

  • Broker 不稳定
  • 网络抖动
  • GC

✅ 解决方案

  • JVM 参数优化
  • 网络排查
  • broker 资源预留

🔟 Controller 压力过大

🔴 场景

  • 集群操作慢
  • topic / partition 操作卡顿

🔍 原因

  • 分区数过多
  • 频繁 rebalance
  • Broker 上下线频繁

✅ 解决方案

  • 控制总分区数
  • 扩 broker
  • KRaft 模式

1️⃣1️⃣ 元数据膨胀问题

🔴 场景

  • 启动慢
  • rebalance 慢
  • 内存占用大

🔍 原因

  • 分区数爆炸
  • topic 太多

✅ 经验法则

  • 单 broker ≤ 5k 分区(安全)
  • 集群 ≤ 20k 分区(稳妥)

1️⃣2️⃣ 跨机房 / 跨 AZ 问题

🔴 场景

  • 延迟高
  • 副本不同步

🔍 原因

  • 网络 RTT 大
  • ISR 频繁进出

✅ 解决方案

  • rack awareness
  • 同城多 AZ
  • MirrorMaker 2

1️⃣3️⃣ 扩容不自动均衡(运维坑点)

🔴 场景

  • 新 broker 很闲
  • 老 broker 很忙

🔍 原因

  • Kafka 不自动迁移分区

✅ 解决方案

  • 手动 reassignment
  • 定期做均衡

三、对比

系统 典型问题
Redis 穿透、击穿、雪崩
Kafka 丢失、重复、乱序、积压、重平衡、磁盘瓶颈

总结

  • Redis 的问题在「缓存一致性」
  • Kafka 的问题在「高吞吐下的一致性 + 运维复杂度」

四、总结

Kafka 常见问题主要有:

消息丢失、消息重复、顺序性问题、消息积压、重平衡风暴,以及运维侧的磁盘瓶颈、副本不同步、Leader 频繁切换、分区数过多导致的元数据压力。

这些问题需要通过合理的 Producer / Consumer 配置、分区与副本规划、以及持续监控来解决。