Kafka 经典问题
Kafka 的问题集中在:一致性、顺序性、延迟、积压、重平衡、磁盘、网络、运维复杂度。
- 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 默认不保证不丢消息,必须靠配置 + 规范
- Consumer 重启
- Rebalance
- 手动重试
- Offset 提交失败
- 业务未实现幂等
- Producer:幂等性 / 事务
- Consumer:业务幂等(唯一键、去重表)
👉 Kafka 的设计目标是“不丢”,不是“不重”
- 同一业务消息乱序
- 扣款、状态流转异常
- 多分区
- 一个分区多个 consumer 线程
- 重平衡
- 同一 key -> 同一 partition
- 一个 partition -> 一个消费线程
- 不在业务中乱并发
- 写入后几秒甚至几十秒才消费
- 高峰期延迟暴涨
- linger.ms
- batch.size 太大
- Page Cache 压力
- Consumer poll 不及时
- 合理配置 linger.ms
- 控制 batch
- 监控 consumer lag
- IO 独立磁盘
- Consumer lag 不断上涨
- 消费不过来
- 消费能力 < 生产能力
- 分区不足
- 单条消息处理太慢
- 增加 Consumer 实例
- 增加分区数
- 多线程消费
- 降低 Producer 写入速率
- Consumer 经常重平衡
- 消费频繁暂停
- Consumer 频繁重启
- poll 超时
- GC STW
- session.timeout.ms 太小
- Cooperative Rebalance
- 调大 session / poll interval
- 避免容器频繁重启
- Broker 磁盘满
- IO 等待高
- 写入变慢
- 数据保留时间过长
- 分区过多
- segment 太小
- 磁盘混用
- 独立数据盘
- 设置 retention
- 监控磁盘水位
- 扩容 broker
UnderReplicatedPartitions > 0
- 网络慢
- IO 瓶颈
- follower 拉取慢
- 查 broker IO
- 检查网络
- 扩容 broker
- 减少分区
- topic leader 不稳定
- 消费中断
- Broker 不稳定
- 网络抖动
- GC
- JVM 参数优化
- 网络排查
- broker 资源预留
- 集群操作慢
- topic / partition 操作卡顿
- 分区数过多
- 频繁 rebalance
- Broker 上下线频繁
- 控制总分区数
- 扩 broker
- KRaft 模式
- 启动慢
- rebalance 慢
- 内存占用大
- 分区数爆炸
- topic 太多
- 单 broker ≤ 5k 分区(安全)
- 集群 ≤ 20k 分区(稳妥)
- 延迟高
- 副本不同步
- 网络 RTT 大
- ISR 频繁进出
- rack awareness
- 同城多 AZ
- MirrorMaker 2
- 新 broker 很闲
- 老 broker 很忙
- Kafka 不自动迁移分区
- 手动 reassignment
- 定期做均衡
| 系统 | 典型问题 |
|---|---|
| Redis | 穿透、击穿、雪崩 |
| Kafka | 丢失、重复、乱序、积压、重平衡、磁盘瓶颈 |
总结
- Redis 的问题在「缓存一致性」
- Kafka 的问题在「高吞吐下的一致性 + 运维复杂度」
Kafka 常见问题主要有:
消息丢失、消息重复、顺序性问题、消息积压、重平衡风暴,以及运维侧的磁盘瓶颈、副本不同步、Leader 频繁切换、分区数过多导致的元数据压力。
这些问题需要通过合理的 Producer / Consumer 配置、分区与副本规划、以及持续监控来解决。