Ubuntu Kafka故障排查指南
systemctl
命令檢查Kafka及依賴服務(Zookeeper)的運行狀態,確保服務處于active (running)
狀態。若未運行,可通過sudo systemctl start kafka
(或zookeeper
)啟動服務,并通過sudo systemctl enable kafka
設置開機自啟。/var/log/kafka/
目錄下(核心日志為server.log
)。使用tail -f /var/log/kafka/server.log
實時查看日志,或tail -500 /var/log/kafka/server.log
查看最近500條日志,重點關注ERROR
、WARN
級別的錯誤信息(如配置錯誤、端口沖突、Zookeeper連接失敗等)。/etc/kafka/server.properties
(默認路徑),核對以下核心配置:
listeners
:Broker監聽的地址和端口(如PLAINTEXT://your_server_ip:9092
),需與客戶端連接地址一致;advertised.listeners
:客戶端訪問Broker的地址(如PLAINTEXT://your_public_ip:9092
),若為集群需確保每個Broker的地址可達;zookeeper.connect
:Zookeeper集群地址(如localhost:2181
或zk1:2181,zk2:2181,zk3:2181
),需確保Zookeeper服務正常;log.dirs
:日志存儲目錄(如/var/lib/kafka/logs
),需確保目錄存在且有寫入權限。kafka-configs.sh
工具或直接讀取配置文件,檢查是否有拼寫錯誤、格式錯誤(如缺少引號、逗號)或無效配置項(如不支持的參數)。ping
命令測試Kafka Broker與客戶端、Zookeeper節點之間的網絡連通性(如ping your_client_ip
);使用telnet
或nc
命令測試端口是否可達(如telnet your_server_ip 9092
或nc -zv your_server_ip 9092
)。若無法連通,需檢查防火墻(sudo ufw allow 9092
)或安全組規則。netstat -tuln | grep 9092
(或ss -tuln | grep 9092
)查看Kafka端口是否被其他進程占用。若端口被占用,可修改server.properties
中的listeners
配置更換端口,或停止占用端口的進程(如sudo kill -9 <PID>
)。systemctl status zookeeper
檢查Zookeeper服務狀態,若未運行,啟動服務(sudo systemctl start zookeeper
)??赏ㄟ^echo stat | nc localhost 2181
(Zookeeper默認端口2181)查看Zookeeper集群狀態,確保Mode
為leader
或follower
。top
、htop
查看CPU使用率,free -h
查看內存使用情況,df -h
查看磁盤空間(確保/var/log/kafka
、/var/lib/kafka/logs
所在分區有足夠空間,建議剩余空間大于20%)。使用iostat -x 1 10
查看磁盤IO性能(重點關注await
、%util
,若%util
接近100%說明磁盤瓶頸)。kafka
或root
)對配置文件(/etc/kafka/server.properties
)、日志目錄(/var/log/kafka
)、數據目錄(/var/lib/kafka/logs
)有讀取和寫入權限??墒褂?code>ls -l /var/log/kafka查看權限,通過sudo chmod -R 755 /var/log/kafka
修改權限。Address already in use
表示端口占用,No such file or directory
表示日志目錄不存在)。常見問題及解決:
listeners
配置或停止占用進程;zookeeper.connect
配置及Zookeeper服務狀態。bootstrap.servers
是否指向正確Broker地址)、Topic是否存在(使用kafka-topics.sh --list --bootstrap-server localhost:9092
)、網絡是否可達;group.id
是否正確)、訂閱Topic是否正確(使用kafka-consumer-groups.sh --describe --bootstrap-server localhost:9092 --group your_group
)、消費者是否已提交偏移量(auto.offset.reset
設置為earliest
可從頭消費)。log.cleanup.policy=compact
)、使用SSD存儲、調整log.segment.bytes
(增大日志段大小,減少刷盤次數);socket.send.buffer.bytes
、socket.receive.buffer.bytes
)、啟用Nagle算法(tcp.no.delay=false
);num.network.threads
(處理網絡請求的線程數,建議設置為CPU核數+1)、num.io.threads
(處理磁盤IO的線程數,建議設置為CPU核數×2);