Debian上Kafka故障排查技巧
使用systemctl
命令確認Kafka服務是否正在運行。若未運行,嘗試啟動服務并再次檢查狀態:
sudo systemctl status kafka # 查看服務狀態
sudo systemctl start kafka # 啟動服務(若未運行)
日志是故障定位的核心依據。Kafka默認日志路徑為/var/log/kafka/server.log
(或/opt/kafka/logs/server.log
,取決于安裝方式),ZooKeeper日志通常位于/var/log/zookeeper/zookeeper.log
。使用tail -f
實時跟蹤最新日志,快速定位錯誤信息:
tail -f /var/log/kafka/server.log # 實時查看Kafka日志
tail -f /var/log/zookeeper/zookeeper.log # 實時查看ZooKeeper日志
Kafka的主配置文件通常為/etc/kafka/server.properties
(或/opt/kafka/config/server.properties
),需重點檢查以下關鍵配置項:
listeners
:確保監聽地址和端口正確(如PLAINTEXT://:9092
);advertised.listeners
:確保對外暴露的地址和端口與listeners
一致(尤其集群環境下);zookeeper.connect
:確保ZooKeeper連接字符串正確(如localhost:2181
或zk1:2181,zk2:2181,zk3:2181
);log.dirs
:確保日志存儲目錄存在且具有寫權限(如/var/lib/kafka/logs
)。Kafka依賴ZooKeeper進行集群管理,需確保ZooKeeper服務正常運行:
sudo systemctl status zookeeper # 查看ZooKeeper狀態
sudo systemctl start zookeeper # 啟動ZooKeeper(若未運行)
Kafka對CPU、內存、磁盤空間要求較高,需通過以下命令檢查資源使用情況:
free -h
(查看可用內存,避免內存不足導致啟動失?。?;top
(查看CPU占用率,過高可能導致性能瓶頸);df -h /var/lib/kafka/data
(確保數據目錄有足夠空間,建議預留20%以上空閑空間)。Kafka Broker之間、Broker與客戶端之間的網絡連接需正常,使用以下命令排查網絡問題:
ping <broker_ip>
(檢查節點間連通性);telnet <broker_ip> 9092
(檢查Kafka端口是否開放,若無法連接需調整防火墻規則)。若Kafka啟動時報錯“內存不足”(如OutOfMemoryError
),需調整JVM堆內存大小。編輯Kafka啟動腳本(如/opt/kafka/bin/kafka-server-start.sh
),添加或修改以下環境變量:
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" # 設置最大堆內存為4GB,初始堆內存為4GB
調整后重啟Kafka服務使配置生效。
使用Kafka自帶命令行工具驗證集群是否正常運行:
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
;bin/kafka-topics.sh --list --bootstrap-server localhost:9092
;bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
;echo "test-message" | bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
;bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
。確保防火墻允許Kafka使用的端口(默認9092)通過,避免網絡隔離導致的問題:
sudo ufw status # 查看防火墻狀態
sudo ufw allow 9092/tcp # 允許Kafka端口(若未允許)
若Topic分區數據損壞導致啟動失敗,可使用kafka-reassign-partitions.sh
工具重新分配分區。首先創建reassign.json
文件(指定需重新分配的Topic),然后執行以下命令:
# 生成重新分配方案
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --generate --topics-to-move-json-file reassign.json --broker-list '0,1,2' > reassign-plan.json
# 執行重新分配
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute --reassign-json-file reassign-plan.json