KafkaOffsetMonitorji監控工具的配置及使用
一、 KafkaOffsetMonitor簡述
KafkaOffsetMonitor,它是由Kafka開源社群提供的一款Web管理介面,是Kafka的一款客戶端消費監控工具,用來實時監控Kafka服務的Consumer以及它們所在的Partition中的Offset,通過KafkaOffsetMonitor,我們可以很直觀的知道,每個Partition的Message是否消費掉,有沒有阻塞等。
通過web介面,可以方便的得知以下資訊:
(1)對Consumer的消費監控,並列出每個Consumer的Offset資料
(2)保護消費者組列表資訊
(3)每個Topic的所有Partition列表包含:Topic、Pid、Offset、LogSize、Lag以及Owner等
(4)瀏覽查閱Topic的歷史消費資訊
注意,在該頁面下還有一個版本是: KafkaMonitor v0.2.0 d3.js visualizations
,如下圖所示:
三、 KafkaOffsetMonitor安裝部署
KafkaOffsetMonitor的安裝部署是較為簡單,因為它把所有的資源都打包到一個JAR檔案中了,因此不用配置檔案,直接執行即可。下面為具體的操作流程:
(1)在Linux系統上面建立一個目錄,用來存放 KafkaOffsetMonitor jar包。
我在 /usr/local/kafka/目錄下 建立一個目錄 名為kafkaOffsetMonitor的目錄,用來存放KafkaOffsetMonitor jar包。
(2)使用 filezilla工具 或其他的 linux遠端連線工具,將下載的 KafkaOffsetMonitor-assembly-0.2.0.jar
包上傳到該目錄 /usr/local/kafka/kafkaOffsetMonitor
下。
(3)通過java編譯命令來執行這個KafkaOffsetMonitor-assembly-0.2.0.jar
包,具體命令如下:(Linux終端輸入該命令後,回車,就會看到下面的資訊)
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk 192.168.158.147:2181 --port 8123 --refresh 5.seconds --retain 1.days
serving resources from: jar:file:/data/KafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2018-01-05 21:17:36.267:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
log4j:WARN No appenders could be found for logger (org.I0Itec.zkclient.ZkConnection).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2018-01-05 21:17:36.630:INFO:oejsh.ContextHandler:started o.e.j.s.ServletContextHandler{/,jar:file:/data/KafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp}
2018-01-05 21:17:36.662:INFO:oejs.AbstractConnector:Started SocketConnector@0.0.0.0:8123
上面我們指定了 port 埠,如果沒有指定埠,則預設會開啟一個隨機埠。對於上面的命令,這裡做一個詳細的說明:
引數說明:
zk :zookeeper主機地址,如果有多個,用逗號隔開
port :應用程式埠(注意是應用程式埠,而不是 zeekeeper 或broker 埠)
refresh :應用程式在資料庫中重新整理和儲存點的頻率
retain :在db中保留多長時間
dbName :儲存的資料庫檔名,預設為offsetapp, 見下圖:
每次執行上面的命令,比較麻煩,而且稍不注意就寫錯。因此為了更方便的啟動KafkaOffsetMonitor,可以寫一個shell 啟動指令碼來直接執行。我這裡新建一個名為:start.sh的指令碼,然後編輯這個指令碼:
#!/bin/sh
java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--port 8123 \
--zk 192.168.158.147:2181 \
--refresh 5.minutes \
--retain 1.day >/dev/null 2>&1
然後儲存退出,並且修改該 start.sh 檔案的許可權。
root@lxg:/usr/local/kafka/kafkaOffsetMonitor# chmod 777 start.sh
啟動KafkaOffsetMonitor
root@lxg:/usr/local/kafka/kafkaOffsetMonitor# nohup /usr/local/kafka/kafkaOffsetMonitor/start.sh &
[1] 6551
root@lxg:/usr/local/kafka/kafkaOffsetMonitor# lsof -i:8123 //檢視8123埠的具體資訊
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 6325 root 16u IPv6 26047 0t0 TCP *:radan-http (LISTEN) //說明8123已經啟動並開啟監聽
四、 KafkaOffsetMonitor Web 檢視kafka消費資訊
在瀏覽器中輸入: http://ip:port
即可以檢視KafkaOffsetMonitor Web 介面,如下圖
已經可以看到 KafkaMonitor
的管理介面了。但是問題來了,不管怎麼點選,這個介面都不會變化,不會相應使用者的操作。很顯然肯定是哪裡出現了問題。查找了很久的資料才找出問題。如下所述:
注意:這裡有個坑,從 github 上面下載的 jar 包是有問題的(因為缺少核心的js外掛-angularjs,它並沒有使用本地的外掛,而是去google地址上下載,所以最終開啟web時候,是沒有任何反應的,除了有一個 KafkaOffsetMonitor 的背景介面 。解決辦法是用好壓把KafkaOffsetMonitor-assembly-0.2.1.jar解壓的一個資料夾,然後找到offsetapp,開啟,編輯index.html,修改三個angular地址),
使用從該百度網盤下載的KafkaOffsetMonitor-assembly-0.2.0.jar
包後,就可以成功的看到了kafka 消費的資料。如下圖: