Ubuntu Kafka故障排查指南
Kafka的日志是故障排查的核心依据,详细记录了服务启动、运行及错误信息。默认情况下,日志位于/var/log/kafka/目录(如server.log)。使用以下命令实时查看最新日志:
tail -f /var/log/kafka/server.log
通过日志中的错误堆栈(如NullPointerException、PortInUseException),可快速定位问题根源(如配置错误、端口冲突、依赖服务异常)。
使用systemctl命令确认Kafka服务是否正在运行:
sudo systemctl status kafka
若服务未运行,尝试启动并设置开机自启:
sudo systemctl start kafka
sudo systemctl enable kafka
若启动失败,需结合日志进一步分析原因(如配置错误、依赖服务未启动)。
Kafka依赖Zookeeper实现集群协调(如分区Leader选举、元数据存储),因此需确保Zookeeper服务正常运行:
sudo systemctl status zookeeper
若Zookeeper未启动,启动服务并检查状态:
sudo systemctl start zookeeper
sudo systemctl status zookeeper
若Zookeeper异常,需排查其日志(通常位于/var/log/zookeeper/)或配置文件(zookeeper.properties)。
Kafka的主配置文件server.properties(通常位于/etc/kafka/或Kafka安装目录下)是服务运行的基础,需重点检查以下配置项:
broker.id:每个Broker的唯一标识(集群中不可重复);listeners:Broker监听的地址和端口(如PLAINTEXT://your_hostname:9092);advertised.listeners:客户端连接的地址和端口(需确保客户端可访问,如公网IP或域名);zookeeper.connect:Zookeeper连接串(如localhost:2181或zk1:2181,zk2:2181,zk3:2181);log.dirs:Kafka日志存储目录(需确保目录存在且有写入权限)。Kafka默认使用9092端口(客户端通信)、9093端口(SSL通信),Zookeeper默认使用2181端口。使用以下命令检查端口占用情况:
sudo netstat -tuln | grep -E '9092|9093|2181'
若端口被占用,可通过以下方式解决:
sudo kill -9 <PID>);listeners和zookeeper.connect,更换为未被占用的端口。log.segment.bytes配置的段文件)会持续增长,需确保磁盘空间充足。使用以下命令检查:df -h
若磁盘空间不足(如使用率超过80%),清理无用日志或扩容磁盘。kafka或root)需对配置文件、日志目录、数据目录有读取/写入权限。例如:sudo chown -R kafka:kafka /var/log/kafka
sudo chown -R kafka:kafka /path/to/log.dirs
```。
Kafka提供了多个命令行工具,可用于验证服务连通性和功能:
/path/to/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
/path/to/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test_topic
/path/to/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
/path/to/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
若工具执行失败(如Connection refused),说明Kafka服务未正常启动或网络配置有误。通过监控工具实时查看Kafka集群的性能指标,可提前发现瓶颈并优化:
kafka-server-start.sh)中添加JMX参数(如-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false),使用JConsole或VisualVM连接查看指标(如MessagesInPerSec、BytesInPerSec、RequestLatencyAvg);Prometheus(通过kafka_exporter采集指标)+ Grafana(可视化展示),或使用Kafka Manager、Kafka Eagle等专用工具,监控集群状态、Topic分区、消费者滞后等指标。ERROR信息(如PortInUseException需更换端口,NoClassDefFoundError需检查依赖库);kafka-consumer-groups.sh --describe --bootstrap-server localhost:9092 --group test_group),若消费者滞后,可增加消费者数量或优化消费逻辑;acks配置(生产者需设置为all,确保消息写入所有ISR副本)、replication.factor(副本数≥2,避免单点故障)。