Kafka故障排查實用方法
systemctl status kafka
(或sudo systemctl status kafka
)確認Kafka服務是否運行;若未運行,通過systemctl start kafka
啟動服務,并通過systemctl enable kafka
設置開機自啟。/var/log/kafka/server.log
(或/path/to/kafka/logs/server.log
),使用tail -f
實時查看最新日志,或tail -500
查看最近500條記錄,重點關注ERROR
、WARN
級別的錯誤信息(如端口沖突、ZooKeeper連接失敗、磁盤空間不足等)。server.properties
(通常位于/etc/kafka/
或/path/to/kafka/config/
),重點確認以下關鍵配置:broker.id
(集群內唯一)、listeners
(Broker監聽地址,如PLAINTEXT://0.0.0.0:9092
)、advertised.listeners
(客戶端訪問地址,如PLAINTEXT://your-domain:9092
)、zookeeper.connect
(ZooKeeper集群地址,如localhost:2181
)、log.dirs
(數據目錄,需可寫)。zkServer.sh status
(Kafka自帶工具)檢查ZooKeeper狀態;若未運行,通過zkServer.sh start
啟動;若連接失敗,檢查zookeeper.connect
配置是否正確,以及ZooKeeper日志(默認/var/lib/zookeeper/logs/zookeeper.out
)中的錯誤信息。ping <broker-ip>
測試Broker之間的網絡可達性;使用telnet <broker-ip> <port>
(如telnet 192.168.1.100 9092
)測試端口連通性,確保無網絡隔離或防火墻阻擋。localhost:9092
)與advertised.listeners
一致,尤其是Docker/Kubernetes環境下,需使用外部可訪問的IP或域名。top
(查看CPU占用)、free -h
(查看內存剩余)、df -h
(查看磁盤空間)命令,重點關注:
-Xmx
/-Xms
,如-Xmx4G -Xms4G
);log.dirs
下的舊數據(如超過7天的日志),或擴展存儲設備。batch.size
(批量發送大小,默認16KB)、開啟compression.type
(消息壓縮,如snappy
)、增大buffer.memory
(緩沖區大小,默認32MB);fetch.min.bytes
(每次拉取的最小數據量,默認1B)、調整fetch.max.wait.ms
(拉取等待時間,默認500ms)、提升消費者并發度(增加num.consumer.fetchers
或消費者實例);num.io.threads
線程數,默認8)。kafka-topics.sh --alter --topic <topic-name> --partitions <new-partition-count>
)、提升消費者并發度(增加消費者實例或num.streams
)、開啟消息壓縮(compression.type=snappy
)。kafka-topics.sh --describe --topic <topic-name> --bootstrap-server <broker-ip>:<port>
查看分區Leader分布,若某Broker持有過多Leader分區(如超過總分區數的50%),使用kafka-reassign-partitions.sh
工具重新分配分區(需提前創建JSON格式的分區分配方案)。kafka-topics.sh --describe
查看ISR(In-Sync Replicas,同步副本集合),若ISR列表持續縮?。ㄈ缫蚋北韭浜筮^多被踢出),調整min.insync.replicas
(最小同步副本數,默認1)或修復落后副本(如重啟故障Broker)。Rebalance started
),調整session.timeout.ms
(會話超時時間,默認10s,建議設置為3-5s以上)、max.poll.interval.ms
(單次poll最大間隔,默認5min,建議根據業務處理時間調整)、增大heartbeat.interval.ms
(心跳間隔,默認3s)。enable.auto.commit=true
時,若業務處理未完成就宕機,重啟后會重復消費;解決方法是設置enable.auto.commit=false
,在業務處理完成后手動提交偏移量(commitSync()
或commitAsync()
);enable.auto.commit=false
時,若提交偏移量前宕機,重啟后會漏消費;解決方法是確保業務邏輯處理完成后再提交偏移量,或使用冪等性處理(如基于消息ID判重)。kafkacat
:命令行工具,用于查看Topic消息(kafkacat -b <broker-ip>:<port> -t <topic-name> -e
)、查看Broker信息(kafkacat -L -b <broker-ip>:<port>
);strimzi-kafka-cli
:Strimzi提供的工具,用于收集集群診斷數據(如日志、配置、指標);9999
),監控JVM內存、GC情況、線程狀態等。