一文聊透如何監控 Kafka 服務
來源:華仔聊技術
閱讀本文大約需要 20 分鐘。
大家好,我是 華仔, 又跟大家見面了。
這是一篇星球 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,總體來說, 它是社群自帶的一個小工具,對於一般簡單的監控場景,它還能應付,但是它畢竟功能有限,複雜的監控整體解決方案,還是要依靠監控框架。
修改 kakfa-server-start.sh 指令碼的 JXM_PORT 配置,如下圖:
export JMX_PORT="9999"
這裡我們直接在 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。同時,這個管理工具也是一個非常好的可以快速瀏覽這個叢集的工具,有如下功能:
管理多個kafka叢集。 便捷的檢查kafka叢集狀態(topics,brokers,備份分佈情況,分割槽分佈情況)。 選擇你要執行的副本。 基於當前分割槽狀況進行。 可以選擇topic配置並建立topic(0.8.1.1和0.8.2的配置不同)。 刪除topic(只支援0.8.2以上的版本並且要在broker配置中設定delete.topic.enable=true)。 Topic list會指明哪些topic被刪除(在0.8.2以上版本適用)。 為已存在的topic增加分割槽。 為已存在的topic更新配置。 在多個topic上批次重分割槽。 在多個topic上批次重分割槽(可選partition broker位置)。
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地址
# 下載版本 kafka-manager-3.0.0.5
wget /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 叢集中的物件及叢集主題中儲存的資訊,關鍵功能如下:
快速檢視所有 Kafka 叢集,包括 Broker、主題、消費者等。 檢視分割槽中訊息的內容並新增資訊訊息。 檢視消費者偏移量。 支援 JSON 、XML 格式輸出。 新增和刪除主題以及其他管理功能。 支援自定義外掛。
從 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管理平臺有以下功能:
對 Consumer 的消費監控,並列出每個 Consumer 的 Offset 資料。 保護消費者組列表資訊。 每個 Topic 的所有 Partition 列表包含:Topic、Pid、Offset、LogSize、Lag 以及 Owner 等等。 瀏覽查閱 Topic 的歷史消費資訊。
它的安裝比較簡單,下載連結: 連結: 提取碼: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
這裡簡單介紹下命令的含義:
com.quantifind.kafka.offsetapp.OffsetGetterWeb 是執行的 web 監控類。 --zk 用來指定 zookeeper 的地址。 --port 用來指定 web 執行的埠。 --refresh 、--retain 用來指定頁面資料重新整理的時間以及保留資料的時間。
開啟瀏覽器訪問 8080 埠,就可以開啟 KafkaOffsetMonitor 的首頁,如下圖所示:
然後選擇 "Topic List" 選項卡,就可以監控某個 Topic 中的具體消費者訊息,如下圖所示:
05 LogiKM
最後給大家推薦一款非常實用牛逼的監控工具, 它是滴滴開源的號稱 "東半球最簡單易用的一站式雲原生實時流資料平臺"。
可以點選官方進行學習:。
開發文件如下:。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2951457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 面試官:聊一聊SpringBoot服務監控機制面試Spring Boot
- 服務監控工具
- 如何監控docker容器內的服務程式Docker
- Ubuntu下監控服務Ubuntu
- SpringBoot系列——admin服務監控Spring Boot
- Kafka - 監控軟體Kafka
- APM效能監控軟體的監控型別服務及監控流程型別
- Kafka監控系統Kafka Eagle剖析Kafka
- grpc服務如何新增sentry監控(新增中介軟體)RPC
- 如何使用zabbix內建 key 配置windows服務監控Windows
- Grafana+Prometheus 監控 MySql服務GrafanaPrometheusMySql
- prometheus監控golang服務實踐PrometheusGolang
- 談服務可用性監控
- SpringBoot快速整合SpringBootAdmin管控臺監控服務Spring Boot
- 在Linux中,如何進行網路服務的監控?Linux
- shell監控服務程式是否啟動
- 搭建私有的前端監控服務: sentry前端
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- KAFKA監控一條龍:史上最強Kafka看板+監控配置與告警規則Kafka
- 一文聊透 IP 地址的那些事
- 如何使用Docker內的kafka服務DockerKafka
- 最佳實踐|從Producer 到 Consumer,如何有效監控 KafkaKafka
- go-kit 微服務 服務監控 (prometheus 實現)Go微服務Prometheus
- 「服務端」node服務的監控預警系統架構服務端架構
- Prometheus監控神器-服務發現篇(二)Prometheus
- 普後設資料服務監控解密解密
- shell指令碼:監控MySQL服務是否正常指令碼MySql
- 滲透技巧——如何巧妙利用PSR監控Windows桌面Windows
- 在 Node 服務中發生 OOM 時,如何監控記憶體?OOM記憶體
- 一文聊透 Dubbo 後設資料中心
- Zabbix透過Orabbix監控OracleOracle
- 服務端思維指南 | 常用效能監控指南服務端
- shell指令碼監控啟動停止weblogic服務指令碼Web
- python監控MongoDB服務程序,故障釘釘告警PythonMongoDB
- 使用Prometheus監控Golang服務-基於YoyoGo框架PrometheusGolang框架
- 硬貨!Zabbix監控AIX系統服務案例AI
- Java服務端監控:Prometheus與Grafana的整合Java服務端PrometheusGrafana
- 【合集】Linux運維常用的服務監控工具Linux運維