一文聊透如何監(jiān)控 Kafka 服務(wù)
大家好,我是 華仔, 又跟大家見面了。
對(duì)于 Kafka 來(lái)說(shuō),監(jiān)控始終是一個(gè)難題。目前,沒有一款免費(fèi)監(jiān)控軟件能夠滿足大部分用戶需求,這些監(jiān)控軟件各有特色但都不夠全面。
今天我們來(lái)講解幾款 Kafka 常用可視化監(jiān)控工具,主要有以下幾個(gè) 「JConsole」、「Kafka Manager」、「Kafka Offset Explorer」、「KafkaOffsetMonitor」、「LogiKM」。
這里說(shuō)明下,第一個(gè)「Jconsole」是基于 JMX 的可視化監(jiān)控管理工具,安裝好 JDK 之后,Java 就提供了 JConsole 客戶端工具,利用它可以監(jiān)控 Kafka 的各項(xiàng)指標(biāo)。其他幾個(gè)都是專門用來(lái) Kafka 集群管理與監(jiān)控的。
下面分別介紹下這幾款監(jiān)控工具的使用。
一、JConsole
這里先簡(jiǎn)單的介紹一下 JMX,全稱:Java Manangement Extensions。JMX 可以管理、監(jiān)控正在運(yùn)行中的 Java 程序,常用來(lái)管理「線程」、「內(nèi)存」、「日志Level」、「服務(wù)重啟」、「系統(tǒng)環(huán)境」等,由于 kafka 底層也是 基于 Java,所以也可以使用 JMX 標(biāo)準(zhǔn)來(lái)管理和監(jiān)控 Kafka。
JConsole 是一種基于 JMX 的可視化監(jiān)控和管理工具,從 Java 5 開始被引入, 用來(lái)監(jiān)控 VM,總體來(lái)說(shuō), 它是社區(qū)自帶的一個(gè)小工具,對(duì)于一般簡(jiǎn)單的監(jiān)控場(chǎng)景,它還能應(yīng)付,但是它畢竟功能有限,復(fù)雜的監(jiān)控整體解決方案,還是要依靠監(jiān)控框架。
- 修改 kakfa-server-start.sh 腳本的 JXM_PORT 配置,如下圖:
export JMX_PORT="9999"
- 這里我們直接在 windows 上啟動(dòng) JConsole,在 CMD 命令行中輸入 JConsole 并回車, 如下圖:
此時(shí)會(huì)調(diào)起 JConsole 的啟動(dòng)界面。
當(dāng)彈出 "安全連接失敗" 提示框,選擇 "不安全的連接" 按鈕, 進(jìn)入 JConsole 監(jiān)控的主界面, 如下圖所示:
二、KafkaManager
Kafka Manager 是 yahoo 在 2015 年開源的一款 Kafka 監(jiān)控軟件,底層使用 Scala 語(yǔ)言編寫,用來(lái)管理和監(jiān)控 Kafka 集群。
這款軟件是眾多 Kafka 監(jiān)控軟件中的翹楚,無(wú)論是界面展示內(nèi)容的豐富程度,還是管理集群功能的全面性,Kafka Manager 都數(shù)一數(shù)二。
目前 Kafka Manager 已經(jīng)支持監(jiān)控新版本 Consumer,如果用戶在使用 Kafka Manager 時(shí)無(wú)法看到新版本的 Consumer Group 信息,那么就需要檢查一下是否使用了過(guò)舊版本的 Kafka Manager。
這個(gè)管理工具可以很容易地發(fā)現(xiàn)分布在集群中的哪些 topic 分布不均勻,或者是分區(qū)在整個(gè)集群分布不均勻的的情況。
它支持管理多個(gè)集群、選擇副本、副本重新分配以及創(chuàng)建 Topic。同時(shí),這個(gè)管理工具也是一個(gè)非常好的可以快速瀏覽這個(gè)集群的工具,有如下功能:
- 管理多個(gè)kafka集群。
- 便捷的檢查kafka集群狀態(tài)(topics,brokers,備份分布情況,分區(qū)分布情況)。
- 選擇你要運(yùn)行的副本。
- 基于當(dāng)前分區(qū)狀況進(jìn)行。
- 可以選擇topic配置并創(chuàng)建topic(0.8.1.1和0.8.2的配置不同)。
- 刪除topic(只支持0.8.2以上的版本并且要在broker配置中設(shè)置delete.topic.enable=true)。
- Topic list會(huì)指明哪些topic被刪除(在0.8.2以上版本適用)。
- 為已存在的topic增加分區(qū)。
- 為已存在的topic更新配置。
- 在多個(gè)topic上批量重分區(qū)。
- 在多個(gè)topic上批量重分區(qū)(可選partition broker位置)。
kafka-manager 項(xiàng)目地址:https://github.com/yahoo/kafka-manager
本文我們使用版本:kafka-manager-3.0.0.5.zip,項(xiàng)目已改名位 CMAK,其安裝和配置非常簡(jiǎn)單,可以按照下面的步驟配置 Kafka Manager。
1、在啟動(dòng) Kafka 集群的命令腳本中,增加 JMX 的相關(guān)參數(shù),否則無(wú)法使用客戶端工具管理和監(jiān)控 Kafka 集群。這里我們以本地虛擬機(jī)為例。
2、修改 Kafka-run-class.sh 文件,找到 JMX settings 的配置位置,增加 JMX Server 的配置信息。
#此處可以改為自己的hostname
-Djava.rmi.server.hostname=LAPTOP-3B77RHGG
3、修改 kakfa-server-start.sh 腳本的 JXM_PORT 配置,如下圖:
export JMX_PORT="9999"
4、啟動(dòng) kafka。
bin/kafka-server-start.sh config/server.properties &
5、下載 Kafka Manager,并解壓到 /home/wangjianghua/src/ 目錄下。
# github地址
https://github.com/yahoo/CMAK
# 下載版本 kafka-manager-3.0.0.5
wget https://github.com/yahoo/CMAK/releases/download/3.0.0.5/cmak-3.0.0.5.zip
# 解壓文件
unzip cmak-3.0.0.5.zip
6、修改配置,進(jìn)入 Kafka Manager 的 conf 目錄,修改 application.conf 文件。
# 這里是指定 zookeeper 集群的地址,如果有多個(gè),逗號(hào)隔開
cmak.zkhosts="localhost:2181"
7、啟動(dòng) Kafka Manager 。
# nohup 方式
nohup bin/cmak &
# 指定參數(shù)方式啟動(dòng) 默認(rèn)啟動(dòng)端口 9000
nohup bin/cmak -Dconfig.file=conf/application.conf -Dhttp.port=9000 &
8、啟動(dòng)成功后,輸出如下日志信息。
我們使用 bin/cmak 這個(gè)命令來(lái)啟動(dòng),會(huì)使用默認(rèn)配置文件和端口號(hào)9000。
啟動(dòng)完畢后可以查看端口是否啟動(dòng),由于啟動(dòng)過(guò)程需要一段時(shí)間,端口起來(lái)的時(shí)間可能會(huì)延后。
從日志中可以看出, Kafka Manager 將運(yùn)行在 9000 端口上,使用ip地址:端口訪問(wèn)測(cè)試。
可以看到,此時(shí)已經(jīng)啟動(dòng)成功了。
如果報(bào)如下錯(cuò)誤,請(qǐng)升級(jí)jdk版本到11。
1、測(cè)試 KafkaManager
(1)新建 Cluster
點(diǎn)擊【Cluster】>【Add Cluster】打開如下添加集群的配置界面:
輸入集群的名字(如Kafka-Cluster-1)和 Zookeeper 服務(wù)器地址(如localhost:2181),選擇最接近的Kafka版本(如2.7)
注意:如果沒有在 Kafka 中配置過(guò) JMX_PORT,千萬(wàn)不要選擇第一個(gè)復(fù)選框。Enable JMX Polling 如果選擇了該復(fù)選框,Kafka-manager 可能會(huì)無(wú)法啟動(dòng)。
其他 broker 相關(guān)的配置可以根據(jù)自己需要進(jìn)行配置,默認(rèn)情況下,點(diǎn)擊【保存】時(shí),會(huì)提示幾個(gè)默認(rèn)值為1的配置錯(cuò)誤,需要配置為>=2的值。提示如下:
新建完成后,運(yùn)行界面如下:
(2)Topic List
(3)Broker
2、管理 KafkaManager
(1)創(chuàng)建 Topic
點(diǎn)擊【Topic】>【Create】可以方便的創(chuàng)建并配置主題。如下圖所示:
(2)查看 Topic
點(diǎn)擊【topic】下面的 topic 名稱,即可查看對(duì)應(yīng) topic 信息。
三、Kafka Offset Explorer
Kafka Tool 是用來(lái)管理和使用 Kafka 集群的圖形應(yīng)用程序。提供了一種直觀的界面,讓用戶可以快速查看 Kafka 集群中的對(duì)象及集群主題中存儲(chǔ)的信息,關(guān)鍵功能如下:
- 快速查看所有 Kafka 集群,包括 Broker、主題、消費(fèi)者等。
- 查看分區(qū)中消息的內(nèi)容并添加信息消息。
- 查看消費(fèi)者偏移量。
- 支持 JSON 、XML 格式輸出。
- 添加和刪除主題以及其他管理功能。
- 支持自定義插件。
從 Kafka Tool 官網(wǎng)直接下載 Kafka Offset Explorer 2.3.2 版本,下載完成后,直接按照啟動(dòng)即可。
添加一個(gè) Kafka Cluster 集群并測(cè)試,直接連接測(cè)試如下:
單擊“是”進(jìn)入 Kafka 集群的首頁(yè)。
通過(guò)上面圖示我們可以看到 Kafka 集群的 Broker 信息、 Topics 信息以及 Consumers 信息。
現(xiàn)在我們來(lái)創(chuàng)建一個(gè) Topic。
1、 點(diǎn)擊 "Browers" 集群中的 "Topics" 節(jié)點(diǎn),并在右邊的界面中單擊。
按鈕,或者右擊 "Topics" 節(jié)點(diǎn)2、 輸入 Topic 名稱、分區(qū)數(shù)、每個(gè)分區(qū)的副本數(shù),如下圖所示:3、 單擊 "Add" 按鈕,成功創(chuàng)建 Topic,如下圖所示:
4、現(xiàn)在我們來(lái)用該工具來(lái)接收 message2 上的消息數(shù)據(jù)。,選擇剛創(chuàng)建的主題 message2,并在右邊的窗口選擇 "Data" 選項(xiàng)卡,如下圖所示:
5、 啟動(dòng)一個(gè) Kafka Producer 命令行終端,發(fā)送一些消息,如下圖所示:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic message2
6、這里的數(shù)據(jù)格式默認(rèn)是 "Byte Array",可以在 Properties 的設(shè)置中將其修改為 String,并單擊 "Update" 按鈕,如下圖所示:
7、再次回到 Data 頁(yè)面,此時(shí)數(shù)據(jù)將按照正確的格式展示,如下圖所示:
因?yàn)橹虚g在終端打了好多回車,所以出來(lái)也是空白值。
四、KafkaOffsetMonitor
KafkaOffsetMonitor 是一款 Kafka 開源社區(qū)提供的基于 web 界面的管理平臺(tái),可以用來(lái)實(shí)時(shí)監(jiān)控 Kafka 服務(wù)的消費(fèi)組以及它們所在分區(qū)的 Offset,你可以通過(guò)瀏覽當(dāng)前的消費(fèi)者組,并且每個(gè) Topic 的所有分區(qū)的消費(fèi)情況都可以進(jìn)行實(shí)時(shí)監(jiān)控。
它讓我們很直觀的知道,每個(gè) Partition 的 Message 是否消費(fèi)掉,有沒有阻塞情況等等。這個(gè) Web 管理平臺(tái)保留的Partition、Offset 和它的 Consumer 的相關(guān)歷史數(shù)據(jù),我們可以通過(guò)瀏覽 Web 管理的相關(guān)模塊,清楚的知道最近一段時(shí)間的消費(fèi)情況。
該Web管理平臺(tái)有以下功能:
- 對(duì) Consumer 的消費(fèi)監(jiān)控,并列出每個(gè) Consumer 的 Offset 數(shù)據(jù)。
- 保護(hù)消費(fèi)者組列表信息。
- 每個(gè) Topic 的所有 Partition 列表包含:Topic、Pid、Offset、LogSize、Lag 以及 Owner 等等。
- 瀏覽查閱 Topic 的歷史消費(fèi)信息。
它的安裝比較簡(jiǎn)單,下載鏈接: 鏈接:https://pan.baidu.com/s/1Vfcfvci0g4YwSuYjcSpf0w?pwd=8484 提取碼:8484。
將其放到某個(gè)目錄下,然后在該目錄下執(zhí)行如下命令:
java -cp KafkaOffsetMonitor-assembly-0.3.0.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--offsetStorage kafka \
--zk localhost:2181 \
--port 8080 \
--refresh 10.seconds \
--retain 1.days
這里簡(jiǎn)單介紹下命令的含義:
- com.quantifind.kafka.offsetapp.OffsetGetterWeb 是運(yùn)行的 web 監(jiān)控類。
- --zk 用來(lái)指定 zookeeper 的地址。
- --port 用來(lái)指定 web 運(yùn)行的端口。
- --refresh 、--retain 用來(lái)指定頁(yè)面數(shù)據(jù)刷新的時(shí)間以及保留數(shù)據(jù)的時(shí)間。
打開瀏覽器訪問(wèn) 8080 端口,就可以打開 KafkaOffsetMonitor 的首頁(yè),如下圖所示:
然后選擇 "Topic List" 選項(xiàng)卡,就可以監(jiān)控某個(gè) Topic 中的具體消費(fèi)者消息,如下圖所示:
五、LogiKM
最后給大家推薦一款非常實(shí)用牛逼的監(jiān)控工具, 它是滴滴開源的號(hào)稱 "東半球最簡(jiǎn)單易用的一站式云原生實(shí)時(shí)流數(shù)據(jù)平臺(tái)"。
可以點(diǎn)擊官方進(jìn)行學(xué)習(xí):https://knowstreaming.com。
開發(fā)文檔如下:https://doc.knowstreaming.com/product/1-brief-introduction。