Kafka在Linux上的故障排查指南
首先確認Kafka服務是否正常運行,使用systemctl
命令查看狀態:
systemctl status kafka
若服務未啟動,嘗試啟動:systemctl start kafka
;若啟動失敗,需進一步排查日志。
Kafka的日志文件(通常位于/var/log/kafka/
或/opt/kafka/logs/
)包含故障詳細信息,使用以下命令實時查看最新日志:
tail -f /var/log/kafka/server.log
重點關注ERROR
、FATAL
級別的日志(如NotLeaderForPartitionException
、SocketTimeoutException
),這些日志會直接指向故障根源。
檢查Kafka主配置文件(server.properties
)的關鍵參數,確保配置正確:
broker.id
:每個Broker的唯一標識(集群內不能重復);listeners
:Broker監聽的地址和端口(如PLAINTEXT://0.0.0.0:9092
);advertised.listeners
:客戶端連接的地址(需與客戶端網絡可達,如PLAINTEXT://broker1:9092
);zookeeper.connect
:Zookeeper集群地址(如localhost:2181
);log.dirs
:數據存儲目錄(需有足夠磁盤空間)。Kafka依賴Zookeeper進行集群管理,需確保Zookeeper服務正常運行:
systemctl status zookeeper
;systemctl start zookeeper
;kafka-topics.sh
創建或列出Topic,若失敗則檢查網絡或Zookeeper配置。確保Kafka節點之間、Kafka與客戶端之間的網絡暢通:
ping
測試節點間網絡可達性:ping <broker_ip>
;telnet
測試端口連通性:telnet <broker_ip> 9092
(若端口不通,需檢查防火墻或安全組設置)。檢查服務器硬件資源使用情況,避免資源瓶頸:
top
、htop
查看CPU使用率(若java
進程占用過高,可能存在GC問題);free -m
查看內存剩余(若內存不足,需調整JVM堆內存KAFKA_HEAP_OPTS
);df -h
查看磁盤空間(log.dirs
所在分區剩余空間需大于10%);iostat -x 1
查看磁盤讀寫延遲(%util
超過80%需優化存儲或調整Kafka參數)。使用Kafka自帶工具測試生產者和消費者功能,驗證集群是否正常工作:
bin/kafka-console-producer.sh --broker-list <broker_ip>:9092 --topic test
(輸入消息并觀察是否成功發送);bin/kafka-console-consumer.sh --bootstrap-server <broker_ip>:9092 --topic test --from-beginning
(查看是否能消費到消息);bin/kafka-topics.sh --list --bootstrap-server <broker_ip>:9092
(確認Topic是否存在)。kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092
),確保Leader副本正常;若分區副本數不足,調整default.replication.factor
(建議設置為3)。netstat -tuln | grep 9092
顯示端口被占用,修改server.properties
中的listeners
配置(如改為9093
),并重啟Kafka。df -h
查看磁盤空間,清理log.dirs
目錄下的舊日志(可通過kafka-configs.sh
調整log.retention.hours
縮短日志保留時間)。systemctl status zookeeper
),確保zookeeper.connect
配置正確(如localhost:2181
),并檢查防火墻是否允許Zookeeper端口(默認2181
)。使用監控工具實時跟蹤Kafka集群狀態,提前預警故障:
Prometheus + Grafana
監控Broker的CPU、內存、磁盤I/O、網絡吞吐量等指標;Kafka Manager
、Burrow
(監控Consumer Lag)、Confluent Control Center
查看Topic分區狀態、副本同步情況、生產者/消費者延遲等;ELK
(Elasticsearch+Logstash+Kibana)收集和分析Kafka日志,快速定位歷史故障。