Kafka在Ubuntu上的故障排查方法
使用systemctl命令确认Kafka及依赖的Zookeeper服务是否正常运行:
sudo systemctl status kafka # 检查Kafka服务状态
sudo systemctl status zookeeper # 检查Zookeeper服务状态
若服务未启动,可使用sudo systemctl start kafka启动;若需开机自启,执行sudo systemctl enable kafka。
Kafka和Zookeeper的日志是故障排查的核心依据,通常位于/var/log/kafka/(Kafka)或/var/log/zookeeper/(Zookeeper)目录下:
sudo tail -f /var/log/kafka/server.log # 实时查看Kafka日志
sudo tail -f /var/log/zookeeper/zookeeper.log # 实时查看Zookeeper日志
重点关注ERROR、WARN级别的日志,如NotLeaderForPartitionException(分区Leader异常)、java.net.BindException(端口冲突)等。
Kafka的主配置文件server.properties(通常位于/etc/kafka/或Kafka安装目录的config/下)需重点检查以下参数:
broker.id:每个Broker的唯一标识(集群中不可重复);listeners:Broker监听的地址和端口(如PLAINTEXT://your_server_ip:9092);advertised.listeners:客户端连接的地址和端口(需与listeners一致或适配客户端网络);zookeeper.connect:Zookeeper集群连接字符串(如localhost:2181或zk1:2181,zk2:2181,zk3:2181);log.dirs:Kafka日志存储目录(需确保磁盘空间充足)。确保Kafka Broker之间、Broker与客户端之间的网络通信正常:
ping命令测试IP连通性:ping <kafka_broker_ip>;telnet命令测试端口可达性:telnet <kafka_broker_ip> 9092(若端口不通,需检查防火墙或安全组设置)。Kafka对磁盘、内存、CPU的依赖较高,需通过以下命令监控资源使用情况:
df -h(重点关注log.dirs所在分区的剩余空间,建议保留20%以上);top或htop(查看Kafka进程的CPU占用率和内存消耗,若内存不足,需调整JVM堆内存参数-Xmx/-Xms);iostat -x 1 10(查看磁盘读写延迟,若延迟过高,需更换SSD或优化磁盘配置)。Kafka默认使用9092端口(生产环境可能调整),若端口被其他进程占用,会导致Broker启动失败:
sudo netstat -tulnp | grep 9092 # 查看9092端口的占用进程
若端口被占用,可通过以下方式解决:
sudo kill -9 <pid>;server.properties中的listeners参数,更换为其他端口(如9093)。java -version验证,若未安装,执行sudo apt install openjdk-11-jdk;status为leader或follower),可通过zkCli.sh工具检查Zookeeper数据树;sudo chown -R $USER:$USER /opt/kafka_2.13-3.0.0)。Kafka提供了多个命令行工具用于快速诊断问题:
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list # 查看Topic列表
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test # 生产者发送消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning # 消费者接收消息
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
使用监控工具实时跟踪Kafka集群的健康状态,及时发现潜在问题:
UnderReplicatedPartitions未同步分区数、RequestQueueTimeMs请求队列时间),在Grafana中配置 dashboard 可视化;jconsole或jmxtrans工具查看JVM内存、线程、GC等指标。