Kafka的日志文件是故障排查的核心依據,通常位于/path/to/kafka/logs/server.log(默認路徑可通過server.properties中的log.dirs確認)。使用以下命令查看最新日志:
tail -n 500 /path/to/kafka/logs/server.log | grep -i "error\|exception" # 過濾錯誤和異常信息
通過日志中的具體報錯(如NotLeaderForPartitionException、Connection refused),可快速定位問題根源。
使用systemctl命令確認Kafka服務是否正在運行:
systemctl status kafka
若服務未啟動,嘗試啟動并查看啟動結果:
systemctl start kafka
systemctl status kafka # 確認啟動是否成功
若啟動失敗,需結合日志進一步分析原因。
Kafka依賴Zookeeper集群存儲元數據,需確保Zookeeper服務正常運行:
systemctl status zookeeper
若Zookeeper未啟動,啟動它并檢查日志(通常位于/var/log/zookeeper/):
systemctl start zookeeper
tail -n 200 /var/log/zookeeper/zookeeper.log
常見問題是Zookeeper集群節點未全部啟動或zookeeper.connect配置錯誤。
Kafka的配置文件(通常位于/path/to/kafka/config/server.properties)是故障排查的關鍵,需重點檢查以下參數:
broker.id:每個Broker必須有唯一的ID(整數),集群中不可重復;listeners:Broker監聽的地址和端口(如PLAINTEXT://0.0.0.0:9092),需與服務器IP匹配;advertised.listeners:客戶端連接的地址和端口(如PLAINTEXT://your_server_ip:9092),需確??蛻舳丝稍L問;zookeeper.connect:Zookeeper集群地址(如localhost:2181或zk1:2181,zk2:2181,zk3:2181),需與Zookeeper實際地址一致;log.dirs:數據存儲目錄(如/var/lib/kafka),需確保目錄存在且有寫入權限。Kafka默認使用9092端口(listeners配置決定),需確認端口未被其他進程占用:
netstat -tuln | grep 9092 # 或使用 ss -tuln | grep 9092
若端口被占用,可通過以下方式解決:
kill -9 <PID>(需確認進程合法性);listeners配置,更換端口(如9093),并重啟服務。Kafka需要足夠的磁盤空間存儲消息數據,若磁盤空間不足(剩余空間<10%),可能導致Broker無法啟動或寫入失?。?/p>
df -h # 查看各分區磁盤使用情況
若磁盤空間不足,清理無用文件(如舊日志、臨時文件)或擴容磁盤。
Kafka運行的用戶(通常為kafka)需對以下目錄有讀寫權限:
/path/to/kafka/config);log.dirs指定的目錄,如/var/lib/kafka);logs目錄,如/path/to/kafka/logs)。chown -R kafka:kafka /path/to/kafka/config /var/lib/kafka /path/to/kafka/logs
若權限不足,Kafka可能無法啟動或寫入數據。
確保Kafka服務器與客戶端、Zookeeper集群之間的網絡通暢:
ping <client_ip>;telnet <client_ip> 9092(若未安裝telnet,可使用nc -zv <client_ip> 9092);firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload
若網絡不通,需調整防火墻規則或檢查網絡設備配置。
NotLeaderForPartitionException:表示當前Broker不是分區的Leader。解決方法:檢查Zookeeper中的分區副本狀態(使用kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092),確保Leader副本正常;若副本狀態異常,可使用kafka-reassign-partitions.sh重新分配副本。Connection refused:客戶端無法連接到Broker。解決方法:檢查Broker是否啟動(systemctl status kafka)、端口是否正確(listeners配置)、防火墻是否開放(firewall-cmd --list-ports)。ZooKeeper connection timeout:Kafka無法連接到Zookeeper。解決方法:檢查Zookeeper服務狀態(systemctl status zookeeper)、zookeeper.connect配置是否正確、網絡是否通暢(ping <zookeeper_ip>)。在完成上述排查并解決問題后,重啟Kafka服務使配置生效:
systemctl stop kafka
systemctl start kafka
systemctl status kafka # 確認服務狀態
通過以上步驟,可覆蓋CentOS上Kafka常見的故障場景。若問題仍未解決,建議收集日志信息(server.log、zookeeper.log)并在Kafka社區(如Stack Overflow、Kafka官方論壇)尋求幫助。