本文介紹使用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的消費速度來調整分區數,以使消費延遲符合預期。通常來說,分區數越多,能夠支持的消費者的并行度也越高。