一、基础环境与服务状态检查
systemctl status kafka
确认Kafka服务是否处于active (running)
状态;若未启动,执行systemctl start kafka
并观察启动日志(journalctl -u kafka -f
)中的错误信息。同时检查Zookeeper服务(Kafka依赖其实现集群管理),确保systemctl status zookeeper
显示正常。server.properties
中通过listeners
配置调整),通过netstat -tuln | grep 9092
或ss -tuln | grep 9092
检查端口是否被Kafka进程占用;若端口被占用,需修改server.properties
中的listeners
配置(如改为9093
)或停止占用进程。此外,使用telnet <kafka_broker_ip> 9092
测试客户端与Broker的网络连通性,确保防火墙未阻止该端口(通过firewall-cmd --list-ports
查看开放端口,必要时添加firewall-cmd --add-port=9092/tcp --permanent && firewall-cmd --reload
)。二、配置文件准确性核查
重点检查server.properties
(通常位于/etc/kafka/
或Kafka安装目录下)中的关键配置:
broker.id
:集群中每个Broker的ID必须唯一,禁止重复;log.dirs
:日志目录(如/var/lib/kafka
)需存在且具备读写权限(chown -R kafka:kafka /var/lib/kafka
);zookeeper.connect
:Zookeeper集群地址需正确(如localhost:2181
或zk1:2181,zk2:2181,zk3:2181
),且Zookeeper服务正常;advertised.listeners
:需指向客户端可访问的Broker地址(如PLAINTEXT://<公网IP>:9092
),避免因地址不可达导致连接失败。三、日志与错误信息分析
Kafka的日志文件(默认位于/var/log/kafka/
或logs/
目录下)是故障排查的核心依据。启动失败时,重点查看server.log
中的ERROR
或FATAL
级别日志:
java.net.BindException: Address already in use
,说明端口冲突;No such file or directory: /var/lib/kafka
,说明日志目录不存在或权限不足;Connection refused
,说明Zookeeper服务未启动或网络不通。根据日志中的具体错误信息针对性解决。四、硬件资源监控 使用系统工具检查Kafka所在服务器的资源使用情况:
top
或htop
查看CPU使用率,若长期超过80%,可能需要优化分区数(增加并行度)或升级CPU;free -m
查看内存剩余量,Kafka的JVM堆内存(-Xmx
/-Xms
)建议设置为物理内存的1/4-1/2(避免过大导致GC频繁);df -h
查看磁盘空间(log.dirs
所在分区需预留20%以上空间),使用iostat -x 1
查看磁盘I/O延迟(若await
值过高,建议更换SSD);iftop
或nload
查看网络带宽使用率,若带宽占用超过80%,可能需要升级网络设备或优化数据传输量。五、Zookeeper状态检查
Kafka依赖Zookeeper存储集群元数据(如Broker信息、分区副本状态)。使用zkCli.sh
(Zookeeper自带客户端)连接到Zookeeper集群(./zkCli.sh -server <zk_ip>:2181
),执行以下命令检查状态:
ls /brokers/ids
:查看集群中的Broker列表,若列表为空或Broker数量不足,说明Broker未正确注册;ls /brokers/topics
:查看已创建的Topic列表,确认Topic状态正常。若Zookeeper出现异常(如节点断开、数据不一致),需重启Zookeeper服务(systemctl restart zookeeper
)或修复数据。六、常见场景故障解决
log.dirs
和data
目录下的内容(需备份重要数据),再重新启动;java -version
确认Java版本符合Kafka要求(建议使用Java 8或11),并确保JAVA_HOME
环境变量设置正确。kafka-consumer-groups.sh --bootstrap-server <broker_ip>:9092 --describe
查看Lag值),可采取以下措施:
num.consumer.fetchers
设置为大于1的值,或增加消费者实例);df -h
显示磁盘空间不足,需清理旧日志(如删除/var/log/kafka/
中超过7天的日志文件),或扩展磁盘空间(如挂载新磁盘并将log.dirs
指向新目录)。