Debian上Kafka故障排查技巧
使用systemctl命令确认Kafka服务是否正在运行。若未运行,尝试启动服务并再次检查状态:
sudo systemctl status kafka # 查看服务状态
sudo systemctl start kafka # 启动服务(若未运行)
日志是故障定位的核心依据。Kafka默认日志路径为/var/log/kafka/server.log(或/opt/kafka/logs/server.log,取决于安装方式),ZooKeeper日志通常位于/var/log/zookeeper/zookeeper.log。使用tail -f实时跟踪最新日志,快速定位错误信息:
tail -f /var/log/kafka/server.log # 实时查看Kafka日志
tail -f /var/log/zookeeper/zookeeper.log # 实时查看ZooKeeper日志
Kafka的主配置文件通常为/etc/kafka/server.properties(或/opt/kafka/config/server.properties),需重点检查以下关键配置项:
listeners:确保监听地址和端口正确(如PLAINTEXT://:9092);advertised.listeners:确保对外暴露的地址和端口与listeners一致(尤其集群环境下);zookeeper.connect:确保ZooKeeper连接字符串正确(如localhost:2181或zk1:2181,zk2:2181,zk3:2181);log.dirs:确保日志存储目录存在且具有写权限(如/var/lib/kafka/logs)。Kafka依赖ZooKeeper进行集群管理,需确保ZooKeeper服务正常运行:
sudo systemctl status zookeeper # 查看ZooKeeper状态
sudo systemctl start zookeeper # 启动ZooKeeper(若未运行)
Kafka对CPU、内存、磁盘空间要求较高,需通过以下命令检查资源使用情况:
free -h(查看可用内存,避免内存不足导致启动失败);top(查看CPU占用率,过高可能导致性能瓶颈);df -h /var/lib/kafka/data(确保数据目录有足够空间,建议预留20%以上空闲空间)。Kafka Broker之间、Broker与客户端之间的网络连接需正常,使用以下命令排查网络问题:
ping <broker_ip>(检查节点间连通性);telnet <broker_ip> 9092(检查Kafka端口是否开放,若无法连接需调整防火墙规则)。若Kafka启动时报错“内存不足”(如OutOfMemoryError),需调整JVM堆内存大小。编辑Kafka启动脚本(如/opt/kafka/bin/kafka-server-start.sh),添加或修改以下环境变量:
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" # 设置最大堆内存为4GB,初始堆内存为4GB
调整后重启Kafka服务使配置生效。
使用Kafka自带命令行工具验证集群是否正常运行:
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1;bin/kafka-topics.sh --list --bootstrap-server localhost:9092;bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092;echo "test-message" | bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test;bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning。确保防火墙允许Kafka使用的端口(默认9092)通过,避免网络隔离导致的问题:
sudo ufw status # 查看防火墙状态
sudo ufw allow 9092/tcp # 允许Kafka端口(若未允许)
若Topic分区数据损坏导致启动失败,可使用kafka-reassign-partitions.sh工具重新分配分区。首先创建reassign.json文件(指定需重新分配的Topic),然后执行以下命令:
# 生成重新分配方案
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --generate --topics-to-move-json-file reassign.json --broker-list '0,1,2' > reassign-plan.json
# 执行重新分配
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute --reassign-json-file reassign-plan.json