本文介紹使用Kafka時可能遇到的問題及解決方案。
報錯“ERROR: Wile executing topic command : Replication factor: 1 larger than available brokers: 0.”
報錯“ERROR: Wile executing topic command : Replication factor: 1 larger than available brokers: 0.”
報錯“java.net.BindException: Address already in use (Bind failed)”
如何清理Kafka組件輸出日誌
當元件服務輸出日誌過大,佔用儲存空間過多時,您可以進入Kafka服務輸出日誌的儲存目錄$LOG_DIR_ROOT
(預設儲存實際目錄為/mnt/disk1/log
),進入後根據需要刪除kafka、cruise-control、kafka-schema-registry、kafka-rest-proxy等kafka組件日誌目錄下的記錄檔。
如何清理Kafka-Manager服務輸出日誌
當元件服務輸出日誌過大,佔用儲存空間過多時,您可以進入Kafka-Manager服務輸出日誌的儲存目錄$LOG_DIR_ROOT/kafka-manager
(預設儲存實際目錄為/mnt/disk1/log/kafka-manager
),進入後根據需要刪除相關記錄檔。
是否可以停止Kafka-Manager服務
Kafka-Manager只是Kafka叢集的管理軟體,Kafka對外提供讀寫服務不依賴Kafka-Manager服務。如果您沒有整合其他Kafka管理平台,建議您保留Kafka-Manager服務。如果您確認不需要Kafka-Manager服務,您可以直接在EMR管控頁面停止該服務。
報錯“ERROR: Wile executing topic command : Replication factor: 1 larger than available brokers: 0.”
問題分析:
Kafka服務異常,叢集Broker退出進程。
Kafka服務的ZooKeeper地址錯誤。
解決方案:
請結合日誌排查問題。
請您使用叢集組態管理中Kafka組件的ZooKeeper串連地址。
報錯“java.net.BindException: Address already in use (Bind failed)”
JMX連接埠被佔用,您可以在命令列前手動指定一個JMX連接埠即可。樣本如下。
JMX_PORT=10101 kafka-topics.sh --bootstrap-server core-1-1:9092 --list
報錯“current leader's lastest offset xxxx is less than replica's lastest offset xxxxxx”
如果確認資料都已經消費完成,或者資料可以丟失,您可以將Kafka Broker的配置項unclean.leader.election.enable
的值修改為true並重啟Broker服務,待Broker服務重啟完成後,再將unclean.leader.election.enable
修改為false。
Kafka資料日誌目錄Log Directory磁碟寫滿
當Kafka資料日誌目錄磁碟被寫滿,會導致相應的Log Directory異常Offline,您可以參見EMR Kafka磁碟寫滿營運,選擇合適的方法進行處理。
報錯“Too many open files”
問題分析:
分區過多或者網路連接過多。
解決方案:
通過修改/etc/security/limits.conf
系統設定檔的方式,修改ulimit open files
的限制,將該設定檔末尾的“* soft nofile”和 “* hard nofile”的值改成需要的大小並重啟問題節點服務。
如何評估一個Kafka topic所需的分區數?
評估一個Kafka topic所需的分區數 ,需要考慮多種因素並根據實際情況進行調整。首先,根據實際情況壓測得出當前叢集配置producer在期望延遲內的單分區每秒輸送量,然後預估topic預期的業務流量,計算出所需的分區數。此外,還需要根據consumer的消費速度來調整分區數,以使消費延遲符合預期。通常來說,分區數越多,能夠支援的消費者的並行度也越高。