Kafka在Debian上的故障排除
小樊
40
2025-12-27 21:59:48
Kafka 在 Debian 上的故障排除手册
一 快速定位流程
- 服务与进程
- 查看 Broker 状态:sudo systemctl status kafka;必要时启动:sudo systemctl start kafka。
- 查看进程与资源:ps aux | grep kafka、top/htop,确认 CPU、内存占用是否异常。
- 日志与系统
- Broker 日志:优先查看 /var/log/kafka/server.log;同时关注 /var/log/syslog、journalctl -u kafka 获取系统级错误。
- 若使用包安装,日志可能在 KAFKA_HOME/logs;若使用 systemd,可用 journalctl -u kafka -f 实时跟踪。
- 依赖与存储
- ZooKeeper 状态:sudo systemctl status zookeeper;异常则先恢复 ZooKeeper。
- 磁盘空间:df -h /var/lib/kafka/data;I/O 异常可从系统日志中检索 Buffer I/O error 等关键字。
- 网络与端口
- 端口占用:netstat -tulpen | grep 9092 或 lsof -i :9092。
- 连通性测试:ping <broker_ip>;必要时 traceroute <broker_ip>;防火墙放行:sudo ufw allow 9092/tcp。
二 常见症状与修复要点
- 无法启动
- 端口被占用:更换 port 或释放 9092;检查 netstat/lsof。
- 配置错误:核对 server.properties 的 log.dirs、listeners、zookeeper.connect 等关键项。
- ZooKeeper 未就绪:先启动并确保 zookeeper.connect 地址正确。
- 磁盘满或 I/O 错误:清理或扩容 log.dirs 所在分区;系统日志检索 Input/Output error。
- Java 环境问题:确认已安装 JRE/JDK 且 JAVA_HOME 正确。
- 客户端连不上
- 核对 advertised.listeners 与客户端连接地址一致(含 hostname/IP 与端口)。
- 防火墙/安全组放行 9092/tcp;跨主机连通性用 ping/traceroute 验证。
- 高延迟或吞吐上不去
- 生产者:增大 batch.size、开启压缩、适当提高 buffer.memory。
- Broker/磁盘:优化磁盘 I/O、降低写放大;网络抖动需排查链路质量。
- 消息堆积
- 增加消费者实例数(不超过分区数);优化消费逻辑并行度。
- 适度增加主题分区数;必要时扩容 Broker 内存/磁盘。
- 消息丢失
- 生产者:acks=all、设置合理 retries;Broker 端保证 min.insync.replicas 与副本数匹配。
- 重复消费
- 关闭自动提交:enable.auto.commit=false,在业务处理完成后手动提交;生产者开启幂等:enable.idempotence=true。
三 关键配置与检查清单
- listeners 与 advertised.listeners
- 明确 listeners(对外可达地址)与 advertised.listeners(客户端实际连接地址),避免内外网错配。
- 存储与保留
- 核对 log.dirs 路径与权限;设置 log.retention.hours、log.retention.bytes 防止磁盘被写满。
- 可靠性与一致性
- 生产者:acks=all、合理 retries;Broker:min.insync.replicas 与副本数协调。
- 消费者稳定性
- 关闭自动提交并手动提交;根据处理能力调整 max.poll.records、session.timeout.ms、max.poll.interval.ms。
- 版本与依赖
- 选择与 Debian 兼容的 Kafka 3.x;安装 openjdk-8-jdk 或合适的 JDK;确保 ZooKeeper 正常运行。
四 常用诊断命令与工具
- 服务与日志
- 服务状态:systemctl status kafka;实时日志:journalctl -u kafka -f;系统日志:tail -f /var/log/syslog。
- 主题与消费组
- 列出主题:kafka-topics.sh --list --bootstrap-server <broker_ip>:9092。
- 消费测试:kafka-console-consumer.sh --bootstrap-server <broker_ip>:9092 --topic <topic_name> --from-beginning。
- 消费组:kafka-consumer-groups.sh --bootstrap-server <broker_ip>:9092 --describe --group <group_id>。
- 集群与复制健康
- 查看异常副本:kafka-topics.sh --describe --bootstrap-server <broker_ip>:9092 --under-replicated-partitions。
- 系统与网络
- 端口占用:netstat -tulpen | grep 9092 或 lsof -i :9092;连通性:ping/traceroute;防火墙:ufw status/allow 9092/tcp。
- 监控与深入
- 第三方监控:Prometheus + Grafana 观测吞吐、延迟、错误率等;必要时用 tcpdump/lsof 抓包分析。
五 应急与恢复建议
- 先保可用:优先恢复 ZooKeeper,再滚动重启 Kafka;变更配置遵循滚动升级策略。
- 快速止血:临时扩容 log.retention.bytes/hours 清理旧日志释放空间;必要时扩容磁盘。
- 数据一致性:在恢复期间避免频繁 leader 切换;确认 ISR 恢复后再进行扩分区/重均衡。
- 复盘与预防:保留 server.log 与 hs_err_pid.log*(JVM 崩溃日志);完善监控告警与定期故障演练。