一文聊透如何監控 Kafka 服務

大家好,我是 華仔, 又跟大家見面了。

這是一篇星球 Kafka 運維專欄的內容,分享給大家,如果大家對 Kafka 感興趣,可以考慮我們星球,專注消息中間件方向,文末有優惠券,下面開始正題。

對於 Kafka 來說,監控始終是一個難題。目前,沒有一款免費監控軟件能夠滿足大部分用戶需求,這些監控軟件各有特色但都不夠全面。

今天我們來講解幾款 Kafka 常用可視化監控工具,主要有以下幾個 「JConsole」、「Kafka Manager」、「Kafka Offset Explorer」、「KafkaOffsetMonitor」、「LogiKM」。

這裏說明下,第一個「Jconsole」是基於 JMX 的可視化監控管理工具,安裝好 JDK 之後,Java 就提供了 JConsole 客戶端工具,利用它可以監控 Kafka 的各項指標。其他幾個都是專門用來 Kafka 集羣管理與監控的。

下面分別介紹下這幾款監控工具的使用。

01 JConsole

這裏先簡單的介紹一下 JMX,全稱:Java Manangement Extensions。JMX 可以管理、監控正在運行中的 Java 程序,常用來管理「線程」、「內存」、「日誌 Level」、「服務重啓」、「系統環境」等,由於 kafka 底層也是 基於 Java,所以也可以使用 JMX 標準來管理和監控 Kafka

JConsole 是一種基於 JMX 的可視化監控和管理工具,從 Java 5 開始被引入, 用來監控 VM,總體來說, 它是社區自帶的一個小工具,對於一般簡單的監控場景,它還能應付,但是它畢竟功能有限,複雜的監控整體解決方案,還是要依靠監控框架。

  1. 修改 kakfa-server-start.sh 腳本的 JXM_PORT 配置,如下圖:
export JMX_PORT="9999"

  1. 這裏我們直接在 windows 上啓動 JConsole,在 CMD 命令行中輸入 JConsole 並回車, 如下圖:

此時會調起 JConsole 的啓動界面。

當彈出 " 安全連接失敗 "提示框,選擇" 不安全的連接 " 按鈕, 進入 JConsole 監控的主界面, 如下圖所示:

02 KafkaManager

Kafka Manager 是 yahoo 在 2015 年開源的一款 Kafka 監控軟件,底層使用 Scala 語言編寫,用來管理和監控 Kafka 集羣。

這款軟件是衆多 Kafka 監控軟件中的翹楚,無論是界面展示內容的豐富程度,還是管理集羣功能的全面性,Kafka Manager 都數一數二

目前 Kafka Manager 已經支持監控新版本 Consumer,如果用戶在使用 Kafka Manager 時無法看到新版本的 Consumer Group  信息,那麼就需要檢查一下是否使用了過舊版本的 Kafka Manager。

這個管理工具可以很容易地發現分佈在集羣中的哪些 topic 分佈不均勻,或者是分區在整個集羣分佈不均勻的的情況

它支持管理多個集羣、選擇副本、副本重新分配以及創建 Topic。同時,這個管理工具也是一個非常好的可以快速瀏覽這個集羣的工具,有如下功能:

  1. 管理多個 kafka 集羣。

  2. 便捷的檢查 kafka 集羣狀態 (topics,brokers, 備份分佈情況, 分區分佈情況)。

  3. 選擇你要運行的副本。

  4. 基於當前分區狀況進行。

  5. 可以選擇 topic 配置並創建 topic(0.8.1.1 和 0.8.2 的配置不同)。

  6. 刪除 topic(只支持 0.8.2 以上的版本並且要在 broker 配置中設置 delete.topic.enable=true)。

  7. Topic list 會指明哪些 topic 被刪除(在 0.8.2 以上版本適用)。

  8. 爲已存在的 topic 增加分區。

  9. 爲已存在的 topic 更新配置。

  10. 在多個 topic 上批量重分區。

  11. 在多個 topic 上批量重分區 (可選 partition broker 位置)。

kafka-manager 項目地址:https://github.com/yahoo/kafka-manager

本文我們使用版本:kafka-manager-3.0.0.5.zip,項目已改名位 CMAK,其安裝和配置非常簡單,可以按照下面的步驟配置 Kafka Manager。

1、在啓動 Kafka 集羣的命令腳本中,增加 JMX 的相關參數,否則無法使用客戶端工具管理和監控 Kafka 集羣。這裏我們以本地虛擬機爲例。

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、啓動 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、修改配置,進入 Kafka Manager 的 conf 目錄,修改 application.conf 文件。

# 這裏是指定 zookeeper 集羣的地址,如果有多個,逗號隔開
cmak.zkhosts="localhost:2181"

7、啓動 Kafka Manager 。

# nohup 方式
nohup bin/cmak &
# 指定參數方式啓動  默認啓動端口 9000
nohup bin/cmak -Dconfig.file=conf/application.conf -Dhttp.port=9000 &

8、啓動成功後,輸出如下日誌信息。

我們使用 bin/cmak 這個命令來啓動,會使用默認配置文件和端口號 9000。

啓動完畢後可以查看端口是否啓動,由於啓動過程需要一段時間,端口起來的時間可能會延後。

從日誌中可以看出, Kafka Manager 將運行在 9000 端口上,使用 ip 地址:端口訪問測試。

可以看到,此時已經啓動成功了。

如果報如下錯誤,請升級 jdk 版本到 11

2.1 測試 KafkaManager

2.1.1 新建 Cluster

點擊【Cluster】>【Add Cluster】打開如下添加集羣的配置界面:

輸入集羣的名字(如 Kafka-Cluster-1)和 Zookeeper 服務器地址(如 localhost:2181),選擇最接近的 Kafka 版本(如 2.7)

注意:如果沒有在 Kafka 中配置過 JMX_PORT,千萬不要選擇第一個複選框。Enable JMX Polling 如果選擇了該複選框,Kafka-manager 可能會無法啓動。

其他 broker 相關的配置可以根據自己需要進行配置,默認情況下,點擊【保存】時,會提示幾個默認值爲 1 的配置錯誤,需要配置爲 >=2 的值。提示如下:

新建完成後,運行界面如下:

2.1.2 Topic List

2.1.3 Broker

2.2 管理 KafkaManager

2.2.1 創建 Topic

點擊【Topic】>【Create】可以方便的創建並配置主題。如下圖所示:

2.2.2 查看 Topic

點擊【topic】下面的 topic 名稱,即可查看對應 topic 信息。

03 Kafka Offset Explorer

Kafka Tool 是用來管理和使用 Kafka 集羣的圖形應用程序。提供了一種直觀的界面,讓用戶可以快速查看 Kafka 集羣中的對象及集羣主題中存儲的信息,關鍵功能如下:

  1. 快速查看所有 Kafka 集羣,包括 Broker、主題、消費者等。

  2. 查看分區中消息的內容並添加信息消息。

  3. 查看消費者偏移量。

  4. 支持 JSON 、XML 格式輸出。

  5. 添加和刪除主題以及其他管理功能。

  6. 支持自定義插件。

從 Kafka Tool 官網直接下載 Kafka Offset Explorer 2.3.2 版本,下載完成後,直接按照啓動即可。

添加一個 Kafka Cluster 集羣並測試,直接連接測試如下:

單擊 “” 進入 Kafka 集羣的首頁。

通過上面圖示我們可以看到 Kafka 集羣的 Broker 信息、 Topics 信息以及 Consumers 信息。

現在我們來創建一個 Topic。

1、 點擊  "Browers" 集羣中的 "Topics" 節點,並在右邊的界面中單擊
按鈕,或者右擊 "Topics" 節點 2、 輸入 Topic 名稱、分區數、每個分區的副本數,如下圖所示:3、 單擊 "Add" 按鈕,成功創建 Topic,如下圖所示:

4、現在我們來用該工具來接收 message2 上的消息數據。,選擇剛創建的主題 message2,並在右邊的窗口選擇 "Data" 選項卡,如下圖所示:5、 啓動一個 Kafka Producer 命令行終端,發送一些消息,如下圖所示:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic message2

6、這裏的數據格式默認是 "Byte Array",可以在 Properties 的設置中將其修改爲 String,並單擊 "Update" 按鈕,如下圖所示:

7、再次回到 Data 頁面,此時數據將按照正確的格式展示,如下圖所示:

因爲中間在終端打了好多回車,所以出來也是空白值。

04 KafkaOffsetMonitor

KafkaOffsetMonitor 是一款 Kafka 開源社區提供的基於 web 界面的管理平臺,可以用來實時監控 Kafka 服務的消費組以及它們所在分區的 Offset,你可以通過瀏覽當前的消費者組,並且每個 Topic 的所有分區的消費情況都可以進行實時監控。

它讓我們很直觀的知道,每個 Partition 的 Message 是否消費掉,有沒有阻塞情況等等。這個 Web 管理平臺保留的 Partition、Offset 和它的 Consumer 的相關歷史數據,我們可以通過瀏覽 Web 管理的相關模塊,清楚的知道最近一段時間的消費情況。

該 Web 管理平臺有以下功能:

  1. 對 Consumer 的消費監控,並列出每個 Consumer 的 Offset 數據。

  2. 保護消費者組列表信息。

  3. 每個 Topic 的所有 Partition 列表包含:Topic、Pid、Offset、LogSize、Lag 以及 Owner 等等。

  4. 瀏覽查閱 Topic 的歷史消費信息。

它的安裝比較簡單,下載鏈接: 鏈接:https://pan.baidu.com/s/1Vfcfvci0g4YwSuYjcSpf0w?pwd=8484 提取碼:8484

將其放到某個目錄下,然後在該目錄下執行如下命令:

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

這裏簡單介紹下命令的含義:

  1. com.quantifind.kafka.offsetapp.OffsetGetterWeb 是運行的 web 監控類。

  2. --zk 用來指定 zookeeper 的地址。

  3. --port 用來指定 web 運行的端口。

  4. --refresh 、--retain 用來指定頁面數據刷新的時間以及保留數據的時間。

打開瀏覽器訪問 8080 端口,就可以打開 KafkaOffsetMonitor 的首頁,如下圖所示:

然後選擇 "Topic List" 選項卡,就可以監控某個 Topic 中的具體消費者消息,如下圖所示:

05 LogiKM

最後給大家推薦一款非常實用牛逼的監控工具, 它是滴滴開源的號稱 "東半球最簡單易用的一站式雲原生實時流數據平臺"。

可以點擊官方進行學習:https://knowstreaming.com。

開發文檔如下:https://doc.knowstreaming.com/product/1-brief-introduction。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/vBCRaoGyqVPE-QyBqNyL9g