温馨提示×

如何进行Linux Kafka的故障排查

小樊
33
2025-12-23 00:07:41
栏目: 智能运维

Linux Kafka 故障排查实操手册

一 快速定位流程

  • 服务状态与日志
    • 查看服务状态与最近日志:systemctl status kafka;journalctl -u kafka -n 100 --no-pager
    • 查看 Kafka 服务日志:tail -n 100 /var/log/kafka/server.log 或安装目录下的 logs/server.log
  • 进程与端口
    • 确认进程:ps aux | grep kafka;jps
    • 检查端口:netstat -tlnp | grep 9092 或 lsof -i :9092
  • 依赖与连通
    • 确认依赖:systemctl status zookeeper(如使用外置 ZooKeeper)
    • 网络与防火墙:确保 9092 端口放行,跨主机连通性正常
  • 资源与权限
    • 资源:free -h、df -h、ulimit -n
    • 目录权限:确认 server.propertieslog.dirs 存在且对运行用户可写

二 常见故障与修复要点

症状 快速检查 修复建议
服务启动失败或闪退 journalctl 报错、server.log 有 Fatal/Exception 对照日志定位根因(配置、依赖、端口、磁盘、权限等),逐项修复后重启
systemd 启动即退出或状态反复 ExecStart 返回 0 但主进程很快退出 将单元 Type=forking,必要时设置 SuccessExitStatus=0 143;确认脚本正确等待子进程
端口被占用 netstat/lsof 显示 9092 被占用 结束占用进程或修改 listeners 端口
ZooKeeper 连接失败 server.log 报无法连接 ZK 确认 zookeeper.connect 正确、ZK 已启动、网络可达
配置或权限错误 启动日志提示路径不存在/不可写 创建 log.dirs 目录并赋权(chown/chmod),核对 broker.id 唯一
Java 或磁盘问题 日志提示 Java 版本/内存/GC 异常、磁盘满 使用受支持的 Java 版本,调整堆与 GC;清理或扩容 log.dirs 所在磁盘

三 配置与连通性核查清单

  • 关键配置核对(server.properties)
    • broker.id:集群内唯一
    • listenersadvertised.listeners:确保客户端可连(内外网地址区分)
    • zookeeper.connect:地址与端口正确(或 KRaft 模式相应配置)
    • log.dirs:目录存在且可写
  • 连通性验证
    • 本机:nc -vz 127.0.0.1 9092
    • 跨机:nc -vz <broker_ip> 9092
    • 防火墙/安全组:放行 9092/TCP
  • 客户端连通测试
    • 生产:bin/kafka-console-producer.sh --bootstrap-server <broker_ip>:9092 --topic test
    • 消费:bin/kafka-console-consumer.sh --bootstrap-server <broker_ip>:9092 --topic test --from-beginning

四 systemd 单元与脚本的正确姿势

  • 推荐单元要点
    • Type=forking(守护进程场景)
    • SuccessExitStatus=0 143(兼容脚本退出码)
    • LimitNOFILE=65536(或更高)
    • Restart=on-failure;RestartSec=10
    • 正确设置 User/GroupEnvironment=“JAVA_HOME=…”
  • 启动脚本示例
    • start) /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties; sleep 5 ;;
    • stop) /opt/kafka/bin/kafka-server-stop.sh ;;
  • 变更后重载与重启
    • systemctl daemon-reload
    • systemctl start kafka && systemctl status kafka

五 性能与稳定性优化要点

  • 硬件与系统
    • 优先 SSD、充足内存、足够 CPU 核心与网络带宽
    • 提升文件描述符与内核网络参数(如 ulimit -n、somaxconn 等)
  • Broker 与 JVM
    • 合理设置 num.partitions、副本与保留策略
    • 批处理与压缩:batch.size、linger.ms、compression.type
    • 网络缓冲:socket.send/receive.buffer.bytes
    • JVM:设置合适的 -Xmx/-Xms,选择合适的 GC(如 G1)
  • 监控与压测
    • 启用 JMX 并结合 Prometheus/Grafana 持续观测吞吐、延迟、错误率
    • 定期压测与容量评估,按结果逐步调参

0