温馨提示×

linux kafka为什么崩溃

小樊
47
2026-09-02 07:21:55
栏目: 智能运维

Linux 上 Kafka 崩溃(进程退出、OOM、频繁重启等)原因非常多,常见可以归成下面几类。你可以对照看是哪一类。


一、内存问题(最常见)

1. JVM 堆内存不足(OOM)

Kafka 是 Java 进程,常见现象:

  • 日志中出现 java.lang.OutOfMemoryError
  • 进程直接被 kill
  • dmesg 中有 Out of memory: Kill process (kafka)

原因:

  • -Xmx 设置太小
  • 分区数过多
  • 消息体太大
  • 副本同步压力大

解决:

# 查看是否被 OOM kill
dmesg | grep -i kill

# 调整堆内存(server.properties 或启动脚本)
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"

2. 堆外内存 / 页缓存问题

Kafka 依赖:

  • 操作系统 page cache
  • 大量磁盘 IO

如果机器内存被其他进程占满,Kafka 性能会骤降甚至假死。


二、磁盘问题

1. 磁盘空间满

这是 Kafka 崩溃/不可写最常见原因。

现象:

  • 日志写不进去
  • broker 自动 shutdown
  • 报错 No space left on device

检查:

df -h
du -sh /var/lib/kafka/*

解决:

  • 清理旧日志
  • 调整 retention
log.retention.hours=72
log.retention.bytes=107374182400

2. 磁盘 IO 性能差

  • 云盘 IO 被打满
  • RAID 卡故障
  • 磁盘坏道

现象:

  • request 超时
  • controller 频繁切换
  • broker 被踢出 ISR

三、ZooKeeper / KRaft 问题

1. ZooKeeper 不稳定(老版本)

  • ZK 会话超时
  • 网络抖动
  • ZK 磁盘慢

Kafka 会:

  • 失去 controller
  • broker 自杀

日志特征:

ZooKeeper session expired

2. KRaft(新版)元数据问题

  • quorum 节点少于一半
  • 元数据日志损坏

四、配置问题

1. 文件描述符不足

Kafka 大量连接 + 文件:

现象:

Too many open files

解决:

ulimit -n 100000

并在 /etc/security/limits.conf 配置。


2. 线程数限制

ulimit -u

3. 不合理参数

比如:

  • num.partitions 超大
  • num.replica.fetchers 过高
  • log.segment.bytes 太小

五、版本 / Bug 问题

  • Kafka 版本 bug
  • JDK 版本不兼容
  • Linux 内核 bug(少见)

建议:

  • 使用稳定版(如 3.6 / 3.7)
  • JDK 11 或 17

六、系统级问题

1. 被 systemd / 容器 kill

journalctl -u kafka

2. 容器内存限制

Docker / K8s 中:

  • 容器 limit < JVM heap
  • 直接 OOMKill

七、快速排查清单(建议按顺序)

# 1. 是否被 OOM
dmesg | grep -i oom

# 2. 磁盘
df -h

# 3. 内存
free -h

# 4. Kafka 日志
tail -n 200 /var/log/kafka/server.log

# 5. 系统日志
journalctl -u kafka -n 200

八、如果你愿意,我可以更精准帮你定位

你可以补充:

  1. Kafka 版本
  2. 部署方式(物理机 / Docker / K8s)
  3. 崩溃时的 关键日志
  4. 是单节点还是集群

我可以帮你直接判断是哪一种崩溃原因。

0