Kafka監控工具彙總

来源:https://www.cnblogs.com/tree1123/archive/2019/08/23/11399130.html
-Advertisement-
Play Games

對於大數據集群來說,監控功能是非常必要的,通過日誌判斷故障低效,我們需要完整的指標來幫我們管理Kafka集群。本文討論Kafka的監控以及一些常用的第三方監控工具。 一、Kafka Monitoring 首先介紹kafka的監控原理,第三方工具也是通過這些來進行監控的,我們也可以自己去是實現監控,官 ...


file

對於大數據集群來說,監控功能是非常必要的,通過日誌判斷故障低效,我們需要完整的指標來幫我們管理Kafka集群。本文討論Kafka的監控以及一些常用的第三方監控工具。

一、Kafka Monitoring

首先介紹kafka的監控原理,第三方工具也是通過這些來進行監控的,我們也可以自己去是實現監控,官網關於監控的文檔地址如下:

http://kafka.apache.org/documentation/#monitoring](http://kafka.apache.org/documentation/#monitoring)

kafka使用Yammer Metrics進行監控,Yammer Metrics是一個java的監控庫。

kafka預設有很多的監控指標,預設都使用JMX介面遠程訪問,具體方法是在啟動broker和clients之前設置JMX_PORT:

JMX_PORT=9997 bin/kafka-server-start.sh config/server.properties

Kafka的每個監控指標都是以JMX MBEAN的形式定義的,MBEAN是一個被管理的資源實例。

我們可以使用Jconsole (Java Monitoring and Management Console),一種基於JMX的可視化監視、管理工具。

來可視化監控的結果:

file

圖2 Jconsole

隨後在Mbean下可以找到各種kafka的指標。

Mbean的命名規範是 kafka.xxx:type=xxx,xxx=xxx

主要分為以下幾類:

(監控指標較多,這裡只截取部分,具體請查看官方文檔)

Graphing and Alerting 監控:

kafka.server為伺服器相關,kafka.network為網路相關。

Description Mbean name Normal value
Message in rate kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
Byte in rate from clients kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec
Byte in rate from other brokers kafka.server:type=BrokerTopicMetrics,name=ReplicationBytesInPerSec
Request rate kafka.network:type=RequestMetrics,name=RequestsPerSec,request={Produce|FetchConsumer|FetchFollower}
Error rate kafka.network:type=RequestMetrics,name=ErrorsPerSec,request=([-.\w]+),error=([-.\w]+) Number of errors in responses counted per-request-type, per-error-code. If a response contains multiple errors, all are counted. error=NONE indicates successful responses.

Common monitoring metrics for producer/consumer/connect/streams監控:

kafka運行過程中的監控。

Metric/Attribute name Description Mbean name
connection-close-rate Connections closed per second in the window. kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\w]+)
connection-close-total Total connections closed in the window. kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\w]+)

Common Per-broker metrics for producer/consumer/connect/streams監控:

每一個broker的監控。

Metric/Attribute name Description Mbean name
outgoing-byte-rate The average number of outgoing bytes sent per second for a node. kafka.[producer|consumer|connect]:type=[consumer|producer|connect]-node-metrics,client-id=([-.\w]+),node-id=([0-9]+)
outgoing-byte-total The total number of outgoing bytes sent for a node. kafka.[producer|consumer|connect]:type=[consumer|producer|connect]-node-metrics,client-id=([-.\w]+),node-id=([0-9]+)

Producer監控:

producer調用過程中的監控。

Metric/Attribute name Description Mbean name
waiting-threads The number of user threads blocked waiting for buffer memory to enqueue their records. kafka.producer:type=producer-metrics,client-id=([-.\w]+)
buffer-total-bytes The maximum amount of buffer memory the client can use (whether or not it is currently used). kafka.producer:type=producer-metrics,client-id=([-.\w]+)
buffer-available-bytes The total amount of buffer memory that is not being used (either unallocated or in the free list). kafka.producer:type=producer-metrics,client-id=([-.\w]+)
bufferpool-wait-time The fraction of time an appender waits for space allocation. kafka.producer:type=producer-metrics,client-id=([-.\w]+)

Consumer監控:

consumer調用過程中的監控。

Metric/Attribute name Description Mbean name
commit-latency-avg The average time taken for a commit request kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)
commit-latency-max The max time taken for a commit request kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)
commit-rate The number of commit calls per second kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)
commit-total The total number of commit calls kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)

Connect監控:

Attribute name Description
connector-count The number of connectors run in this worker.
connector-startup-attempts-total The total number of connector startups that this worker has attempted.

Streams 監控:

Metric/Attribute name Description Mbean name
commit-latency-avg The average execution time in ms for committing, across all running tasks of this thread. kafka.streams:type=stream-metrics,client-id=([-.\w]+)
commit-latency-max The maximum execution time in ms for committing across all running tasks of this thread. kafka.streams:type=stream-metrics,client-id=([-.\w]+)
poll-latency-avg The average execution time in ms for polling, across all running tasks of this thread. kafka.streams:type=stream-metrics,client-id=([-.\w]+)

這些指標涵蓋了我們使用kafka過程中的各種情況,還有kafka.log記錄日誌信息。每一個Mbean下都有具體的參數。

通過這些參數,比如出站進站速率,ISR變化速率,Producer端的batch大小,線程數,Consumer端的延時大小,流速等等,當然我們也要關註JVM,還有OS層面的監控,這些都有通用的工具,這裡不做贅述。

kafka的監控原理已經基本瞭解,其他第三方監控工具也大部分是在這個層面進行的完善,下麵來介紹幾款主流的監控工具。

二、JmxTool

JmxTool並不是一個框架,而是Kafka預設提供的一個工具,用於實時查看JMX監控指標。。

打開終端進入到Kafka安裝目錄下,輸入命令bin/kafka-run-class.sh kafka.tools.JmxTool便可以得到JmxTool工具的幫助信息。

比如我們要監控入站速率,可以輸入命令:

bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://:9997/jmxrmi --date-format "YYYY-MM-dd HH:mm:ss" --attributes FifteenMinuteRate --reporting-interval 5000

BytesInPerSec的值每5秒會列印在控制臺上:

>kafka_2.12-2.0.0 rrd$ bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://:9997/jmxrmi --date-format "YYYY-MM-dd HH:mm:ss" --attributes FifteenMinuteRate --reporting-interval 5000

Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://:9997/jmxrmi.

"time","kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec:FifteenMinuteRate"

2018-08-10 14:52:15,784224.2587058166

2018-08-10 14:52:20,1003401.2319497257

2018-08-10 14:52:25,1125080.6160773218

2018-08-10 14:52:30,1593394.1860063889

三、Kafka-Manager

雅虎公司2015年開源的kafka監控框架,使用scala編寫。github地址如下:https://github.com/yahoo/kafka-manager

使用條件:

  1. Kafka 0.8.. or 0.9.. or 0.10.. or 0.11..
  2. Java 8+

下載kafka-manager

配置:conf/application.conf

kafka-manager.zkhosts="my.zookeeper.host.com:2181,other.zookeeper.host.com:2181"

部署:這裡要用到sbt部署

./sbt clean dist

啟動:

 bin/kafka-manager
 指定埠:
 $ bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080
 許可權:
 $ bin/kafka-manager -Djava.security.auth.login.config=/path/to/my-jaas.conf

隨後訪問local host:8080

就可以看到監控頁面了:

file

圖 topic

file

圖 broker

頁面非常的簡潔,也有很多豐富的功能,開源免費,推薦使用,只是目前版本支持到Kafka 0.8.. or 0.9.. or 0.10.. or 0.11,需要特別註意。

四、kafka-monitor

linkin開源的kafka監控框架,github地址如下:https://github.com/linkedin/kafka-monitor

基於 Gradle 2.0以上版本,支持java 7和java 8.

支持kafka從0.8-2.0,用戶可根據需求下載不同分支即可。

使用:

編譯:

$ git clone https://github.com/linkedin/kafka-monitor.git
$ cd kafka-monitor 
$ ./gradlew jar

修改配置:config/kafka-monitor.properties

"zookeeper.connect" = "localhost:2181"

啟動:

$ ./bin/kafka-monitor-start.sh config/kafka-monitor.properties
單集群啟動:
$ ./bin/single-cluster-monitor.sh --topic test --broker-list localhost:9092 --zookeeper localhost:2181
多集群啟動:
$ ./bin/kafka-monitor-start.sh config/multi-cluster-monitor.properties

隨後訪問localhost:8080 看到監控頁面

file

圖 kafkamonitor

同時我們還可以通過http請求查詢其他指標:

curl localhost:8778/jolokia/read/kmf.services:type=produce-service,name=*/produce-availability-avg

總體來說,他的web功能比較簡單,用戶使用不多,http功能很有用,支持版本較多。

五、Kafka Offset Monitor

官網地址http://quantifind.github.io/KafkaOffsetMonitor/

github地址 https://github.com/quantifind/KafkaOffsetMonitor

使用:下載以後執行

java -cp KafkaOffsetMonitor-assembly-0.3.0.jar:kafka-offset-monitor-another-db-reporter.jar \
     com.quantifind.kafka.offsetapp.OffsetGetterWeb \
     --zk zk-server1,zk-server2 \
     --port 8080 \
     --refresh 10.seconds \
     --retain 2.days
     --pluginsArgs anotherDbHost=host1,anotherDbPort=555

隨後查看localhost:8080

file

圖 offsetmonitor1

file

圖offsetmonitor2

這個項目更關註於對offset的監控,頁面很豐富,但是15年以後不再更新,無法支持最新版本kafka。繼續維護的版本地址如下https://github.com/Morningstar/kafka-offset-monitor。

六、Cruise-control

linkin於2017年8月開源了cruise-control框架,用於監控大規模集群,包括一系列的運維功能,據稱在linkedin有著兩萬多台的kafka集群,項目還在持續更新中。

項目github地址:https://github.com/linkedin/cruise-control

使用:

下載
git clone https://github.com/linkedin/cruise-control.git && cd cruise-control/
編譯
./gradlew jar
修改 config/cruisecontrol.properties
bootstrap.servers   zookeeper.connect
啟動:
./gradlew jar copyDependantLibs
./kafka-cruise-control-start.sh [-jars PATH_TO_YOUR_JAR_1,PATH_TO_YOUR_JAR_2] config/cruisecontrol.properties [port]

啟動後訪問:

http://localhost:9090/kafkacruisecontrol/state

沒有頁面,所有都是用rest api的形式提供的。

介面列表如下:https://github.com/linkedin/cruise-control/wiki/REST-APIs

這個框架靈活性很大,用戶可以根據自己的情況來獲取各種指標優化自己的集群。

七、Doctorkafka

DoctorKafka是Pinterest 開源 Kafka 集群自愈和工作負載均衡工具。

Pinterest是一個進行圖片分享的社交站點。他們使用 Kafka 作為中心化的消息傳輸工具,用於數據攝取、流處理等場景。隨著用戶數量的增加,Kafka 集群也越來越龐大,對它的管理日趨複雜,並變成了運維團隊的沉重負擔,因此他們研發了 Kafka 集群自愈和工作負載均衡工具 DoctorKafka,最近他們已經在GitHub上將該項目開源。

使用:

下載:
git clone [git-repo-url] doctorkafka
cd doctorkafka
編譯:
mvn package -pl kafkastats -am
啟動:
java -server \
    -Dlog4j.configurationFile=file:./log4j2.xml \
    -cp lib/*:kafkastats-0.2.4.8.jar \
    com.pinterest.doctorkafka.stats.KafkaStatsMain \
        -broker 127.0.0.1 \
        -jmxport 9999 \
        -topic brokerstats \
        -zookeeper zookeeper001:2181/cluster1 \
        -uptimeinseconds 3600 \
        -pollingintervalinseconds 60 \
        -ostrichport 2051 \
        -tsdhostport localhost:18126 \
        -kafka_config /etc/kafka/server.properties \
        -producer_config /etc/kafka/producer.properties \
        -primary_network_ifacename eth0

頁面如下:

file

圖dockerkafka

DoctorKafka 在啟動之後,會階段性地檢查每個集群的狀態。當探測到 broker 出現故障時,它會將故障 broker 的工作負載轉移給有足夠帶寬的 broker。如果在集群中沒有足夠的資源進行重分配的話,它會發出告警。屬於一個自動維護集群健康的框架。

八、Burrow

Burrow是LinkedIn開源的一款專門監控consumer lag的框架。

github地址如下:https://github.com/linkedin/Burrow

使用Burrow監控kafka, 不需要預先設置lag的閾值, 他完全是基於消費過程的動態評估

Burrow支持讀取kafka topic和,zookeeper兩種方式的offset,對於新老版本kafka都可以很好支持

Burrow支持http, email類型的報警

Burrow預設只提供HTTP介面(HTTP endpoint),數據為json格式,沒有web UI。

安裝使用:

$ Clone github.com/linkedin/Burrow to a directory outside of $GOPATH. Alternatively, you can export GO111MODULE=on to enable Go module.
$ cd to the source directory.
$ go mod tidy
$ go install

示例:

列出所有監控的Kafka集群
curl -s http://localhost:8000/v3/kafka |jq
{
  "error": false,
  "message": "cluster list returned",
  "clusters": [
    "kafka",
    "kafka"
  ],
  "request": {
    "url": "/v3/kafka",
    "host": "kafka"
  }
}

其他的框架,還有kafka-web-console:https://github.com/claudemamo/kafka-web-console

kafkat:https://github.com/airbnb/kafkat

capillary:https://github.com/keenlabs/capillary

chaperone:https://github.com/uber/chaperone

還有很多,但是我們要結合自己的kafka版本情況進行選擇。

更多實時計算,Kafka等相關技術博文,歡迎關註實時流式計算


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們一般通過表達式$sum來計算總和。因為MongoDB的文檔有數組欄位,所以可以簡單的將計算總和分成兩種:1,統計符合條件的所有文檔的某個欄位的總和;2,統計每個文檔的數組欄位裡面的各個數據值的和。這兩種情況都可以通過$sum表達式來完成。以上兩種情況的聚合統計,分別對應與聚合框架中的 $grou ...
  • MySql學習筆記二 3.6.連接查詢 又稱多表查詢,當查詢的欄位來自於多個表時,就會用到連接查詢 連接查詢分類標準: 按年代分類:sql92標準(僅支持內連接), sql99標準(支持內連接,外連接中的左外連接和右外連接,交叉連接) sql99語法 按功能分類: ​ 內連接:等值連接,非等值連接, ...
  • oracle多表關聯查詢和子查詢 一、多表關聯查詢 例子: student1表 course1表 1、內連接(inner join……on/join on):只連接匹配的行 2、左連接(left join……on):包含左邊表的全部行,不管右邊表的是否存在與它們匹配的行 3、右連接(right jo ...
  • 目標 目標 本文檔描述FairScheduler,一個允許YARN應用程式公平共用集群資源的調度插件。 本文檔描述FairScheduler,一個允許YARN應用程式公平共用集群資源的調度插件。 概述 公平調度是一個分配資源給所有application的方法,平均來看,是隨著時間的進展平等分享資源的 ...
  • 寫SQL語句我們經常需要判斷一個字元串中是否包含另一個字元串,但是SQL SERVER中並沒有像C#提供了Contains函數,不過SQL SERVER中提供了一個叫CHAEINDX的函數,顧名思義就是找到字元(char)的位置(index),既然能夠知道所在的位置,當然就可以判斷是否包含在其中了。 ...
  • 一、問題 由於oracle的版權問題,java連接oracle的jar(ojdbc.jar)在maven的中央倉庫下載不到,然後導致maven項目報錯。 二、解決 第一步:下載ojdbc.jar 由於是自己電腦安裝,直接到oracle資料庫的安裝目錄找就好,我的在這 第二步:複製到maven安裝目錄 ...
  • -U表示用戶 -h表示主機 -p表示埠號 -t表示表名 -f表示備份後的sql文件的名字 -d表示要恢複數據庫名稱 1.備份單表操作 ?pg_dump -U postgres -h localhost -p 5432 -t staff -f /home/staff.sql yjl(表示資料庫名稱) ...
  • 當hdfs文件對外是公開的則該其他用戶就算沒有配置相關的許可權一樣可以進行相關的操作。當hdfs文件對外許可權是沒有開放的,其他用戶若需要進行相關操作則需要通過Ranger進行相關許可權的配置。 首先 /input賦權 775 許可權 下遞歸賦權750許可權 讓許可權管理交給ranger 測試1 建hive1, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...