Linux環境下Kafka故障排查方法
確認Kafka服務是否正常運行,使用systemctl status kafka
命令查看服務狀態。若未運行,嘗試啟動服務(systemctl start kafka
)并觀察啟動日志(journalctl -u kafka -f
)中的錯誤信息。
Kafka的日志文件(通常位于/var/log/kafka/server.log
或/opt/kafka/logs/server.log
)是故障排查的核心線索。通過tail -f
實時查看最新日志,重點關注ERROR
、FATAL
級別的錯誤信息(如端口沖突、磁盤滿、ZooKeeper連接失敗等)。
檢查Kafka主配置文件(通常為/etc/kafka/server.properties
),確保關鍵參數配置正確:
broker.id
:集群內唯一標識,不可重復;listeners
:Broker監聽的地址和端口(如PLAINTEXT://0.0.0.0:9092
);advertised.listeners
:客戶端連接的地址(需與客戶端配置一致);zookeeper.connect
:ZooKeeper集群地址(如zk1:2181,zk2:2181,zk3:2181
);log.dirs
:數據目錄(需存在且可寫)。確保Kafka節點之間、客戶端與Broker之間的網絡暢通:
ping
命令測試Broker節點間的連通性;telnet
或nc
命令測試端口是否可達(如telnet <broker_ip> 9092
);iptables -L -n
),確保未阻止Kafka所需的端口。檢查服務器硬件資源使用情況,避免因資源不足導致故障:
top
、htop
查看CPU使用率,若長期超過80%,需優化JVM配置或增加CPU資源;free -m
查看內存剩余量,調整Kafka的KAFKA_HEAP_OPTS
(如-Xmx8G -Xms8G
);df -h
查看磁盤空間(log.dirs
所在分區剩余空間需大于20%),使用iostat -x 1
查看磁盤I/O負載(%util
超過80%需優化磁盤或擴容);iftop
、nethogs
查看網絡帶寬使用情況,避免帶寬瓶頸。Kafka依賴ZooKeeper進行集群管理,需確保ZooKeeper服務正常:
systemctl status zookeeper
檢查ZooKeeper服務狀態;echo stat | nc <zookeeper_ip> 2181
查看ZooKeeper節點狀態(Mode
應為leader
或follower
);/var/log/zookeeper/zookeeper.log
)中的錯誤信息。確認Topic和分區的配置正確性及健康狀態:
kafka-topics.sh --list --bootstrap-server <broker_ip>:9092
查看所有Topic;kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092
查看Topic的分區數、副本因子、Leader分布(Leader
需均勻分布在各Broker上);Isr
列表需包含所有副本),若存在UnderReplicatedPartitions
(未同步分區),需排查副本同步問題。針對Producer/Consumer的常見故障進行排查:
RecordTooLargeException
需調整message.max.bytes
、max.request.size
;NotLeaderForPartitionException
需檢查Leader分布);kafka-consumer-groups.sh --describe --group <group_id> --bootstrap-server <broker_ip>:9092
查看消費延遲(records_lag_max
),排查消費速度慢的原因(如消費邏輯耗時、分區數不足、Consumer數量不夠)。借助監控工具實現實時監控與告警:
kafka-run-class.sh kafka.tools.JmxTool
查看JMX指標(如吞吐量、延遲);IllegalArgumentException
(如broker.id
非正整數)、BindException
(端口被占用),調整配置或釋放端口;kafka-log-dirs.sh --clean
),調整log.retention.ms
(縮短日志保留時間);num.replica.fetchers
(副本拉取線程數)、調大replica.fetch.max.bytes
(副本拉取緩沖區大?。?,檢查網絡帶寬。