Ubuntu Kafka故障排查步骤
使用systemctl命令确认Kafka服务是否正在运行,若未运行则启动服务并设置开机自启:
sudo systemctl status kafka # 检查服务状态
sudo systemctl start kafka # 启动服务
sudo systemctl enable kafka # 设置开机自启
Kafka的日志文件(通常位于/var/log/kafka/目录下的server.log)包含详细的错误信息,是定位问题的核心依据:
sudo tail -f /var/log/kafka/server.log # 实时查看最新日志
sudo tail -500 /var/log/kafka/server.log # 查看最近500行日志(定位具体错误)
Kafka的主配置文件server.properties(通常位于/etc/kafka/或Kafka安装目录下)需重点检查以下关键配置项:
broker.id:每个Broker的唯一标识(集群中不可重复);listeners:Broker监听的地址和端口(如PLAINTEXT://your_host_name:9092);advertised.listeners:客户端连接的地址和端口(需确保客户端可访问);zookeeper.connect:Zookeeper连接串(如localhost:2181或集群地址);log.dirs:Kafka日志存储目录(需确保磁盘空间充足)。Kafka依赖Zookeeper实现集群协调,需确保Zookeeper服务正常运行:
sudo systemctl status zookeeper # 检查Zookeeper状态
sudo systemctl start zookeeper # 启动Zookeeper
sudo zkServer.sh status # 进入Zookeeper目录执行(查看Leader/Follower状态)
确保Kafka Broker之间、Broker与客户端之间的网络通信正常:
ping命令测试Broker IP连通性:ping your_kafka_broker_ip
telnet命令测试端口连通性(如9092):telnet your_kafka_broker_ip 9092
使用netstat或ss命令检查Kafka所需端口(如9092、2181)是否被其他进程占用:
sudo netstat -tulnp | grep 9092 # 查看9092端口占用情况
sudo ss -tulnp | grep 9092 # 替代命令(更高效)
若端口被占用,可修改server.properties中的listeners配置或停止占用进程。
df命令检查磁盘空间(确保log.dirs所在分区有足够空间):df -h
iostat命令监控磁盘IO性能(若%util接近100%,说明IO瓶颈):iostat -x 1 10 # 每秒采样一次,共10次
Kafka依赖Java运行时环境(JRE),需确保Java版本符合要求(Kafka 2.12+需Java 8+):
java -version # 检查Java版本
echo $JAVA_HOME # 检查JAVA_HOME环境变量(需指向正确路径)
Kafka提供了多个命令行工具用于快速验证集群状态:
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
使用监控工具(如Prometheus+Grafana、kafka_exporter)实时监控Kafka集群的关键指标(如消息吞吐量、延迟、分区Leader分布、ISR集合大小),及时发现性能瓶颈:
kafka_exporter采集指标,用Grafana展示仪表盘;-Dcom.sun.management.jmxremote),使用JConsole连接查看内部指标。log.dirs目录下的所有文件(需提前备份),然后重启Kafka;kafka-reassign-partitions.sh工具重新分配分区(需提前创建reassign.json配置文件)。