<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          幾種常見的 Kafka 集群監(jiān)控工具

          共 9611字,需瀏覽 20分鐘

           ·

          2024-04-12 02:01

          本文選自電子工業(yè)出版社的新書《kafka進階》,推薦一下。


          一個功能健全的kafka集群可以處理相當(dāng)大的數(shù)據(jù)量,由于消息系統(tǒng)是很多大型應(yīng)用的基石,因此broker集群在性能上的缺陷,都會引起整個應(yīng)用棧的各種問題。


          Kafka的度量指標(biāo)主要有以下三類:


          1.Kafka服務(wù)器(Kafka)指標(biāo)

          2.生產(chǎn)者指標(biāo)

          3.消費者指標(biāo)


          另外,由于Kafka的狀態(tài)靠Zookeeper來維護,對于Zookeeper性能的監(jiān)控也成為了整個Kafka監(jiān)控計劃中一個必不可少的組成部分。

          Kafka的監(jiān)控指標(biāo)

          Broker度量指標(biāo)

          Kafka的服務(wù)端度量指標(biāo)是為了監(jiān)控broker,也是整個消息系統(tǒng)的核心。因為所有消息都通過kafka broker傳遞,然后被消費,所以對于broker集群上出現(xiàn)的問題的監(jiān)控和告警就尤為重要。broker性能指標(biāo)有以下三類:


          • Kafka本身的指標(biāo)

          • 主機層面的指標(biāo)

          • JVM垃圾回收指標(biāo)


          UnderReplicatedPartitions

          在一個運行健康的集群中,處于同步狀態(tài)的副本數(shù)(ISR)應(yīng)該與總副本數(shù)(簡稱AR:Assigned Repllicas)完全相等,如果分區(qū)的副本遠(yuǎn)遠(yuǎn)落后于leader,那這個follower將被ISR池刪除,隨之而來的是IsrShrinksPerSec(可理解為isr的縮水情況,后面會講)的增加。由于kafka的高可用性必須通過副本來滿足,所有有必要重點關(guān)注這個指標(biāo),讓它長期處于大于0的狀態(tài)。

          IsrShrinksPerSec

          IsrExpandsPerSec

          任意一個分區(qū)的處于同步狀態(tài)的副本數(shù)(ISR)應(yīng)該保持穩(wěn)定,只有一種例外,就是當(dāng)你擴展broker節(jié)點或者刪除某個partition的時候。為了保證高可用性,健康的kafka集群必須要保證最小ISR數(shù),以防在某個partiton的leader掛掉時它的follower可以接管。如果IsrShrinksPerSec(ISR縮水) 增加了,但并沒有隨之而來的IsrExpandsPerSec(ISR擴展)的增加,就將引起重視并人工介入。

          ActiveControllerCount

          controller的職責(zé)是維護partition leader的列表,當(dāng)遇到這個值等于0且持續(xù)了一小段時間(<1秒)的時候,必須發(fā)出明確的告警。

          OfflinePartitionsCount

          這個指標(biāo)報告了沒有活躍leader的partition數(shù)。

          LeaderElectionRateAndTimeMs

          leader選舉的頻率(每秒鐘多少次)和集群中無leader狀態(tài)的時長(以毫秒為單位)

          UncleanLeaderElectionsPerSec

          這個指標(biāo)如果存在的話很糟糕,這說明kafka集群在尋找partition leader節(jié)點上出現(xiàn)了故障

          TotalTimeMs

          這個指標(biāo)是由4個其他指標(biāo)的總和構(gòu)成的:

          lqueue:處于請求隊列中的等待時間

          llocal:leader節(jié)點處理的時間

          lremote:等待follower節(jié)點響應(yīng)的時間

          lresponse:發(fā)送響應(yīng)的時間

          BytesInPerSec

          BytesOutPerSec

          Kafka的吞吐量


          生產(chǎn)者度量指標(biāo)

          Response rate

          響應(yīng)的速率是指數(shù)據(jù)從producer發(fā)送到broker的速率

          Request rate

          請求的速率是指數(shù)據(jù)從producer發(fā)送到broker的速率

          Request latency avg

          平均請求延遲

          Outgoing byte rate

          Producer的網(wǎng)絡(luò)吞吐量

          IO wait time ns avg

          Producer的I/O等待的時間


          消費者度量指標(biāo)


          ConsumerLag MaxLag

          指consumer當(dāng)前的日志偏移量相對生產(chǎn)者的日志偏移量

          BytesPerSec

          消費者的網(wǎng)絡(luò)吞吐量

          MessagesPerSec

          消息的消費速度

          ZooKeeperCommitsPerSec

          當(dāng)zookeeper處于高寫負(fù)載的時候,將會遇到成為性能瓶頸,從而導(dǎo)致從kafka管道抓取數(shù)據(jù)變得緩慢。隨著時間推移跟蹤這個指標(biāo),可以幫助定位到zookeeper的性能問題,如果發(fā)現(xiàn)有大量發(fā)往zookeeper的commit請求,你需要考慮的是,要不對zookeeper集群進行擴展。

          MinFetchRate

          消費者最小拉取的速率


          通過官方網(wǎng)站的說明(http://kafka.apache.org/documentation/#monitoring),可以查看Kafka提供的所有的監(jiān)控指標(biāo)參數(shù)。在這里只是列出了部分主要的參數(shù)指標(biāo)。

          使用Kafka客戶端監(jiān)控工具

          Kafka常用的客戶端管理、監(jiān)控工具,主要有以下幾種:


          • Kafka Manager

          • Kafka Tool

          • KafkaOffsetMonitor

          • JConsole


          其中,前三個工具都是專門用于Kafka集群的管理與監(jiān)控;而JConsole(Java Monitoring and Management Console),是一種基于JMX的可視化監(jiān)視、管理工具,安裝好了JDK以后,Java就為我們提供了JConsole的客戶端工具。利用它我們也可以監(jiān)控Kafka的各項指標(biāo)。


          這里我們簡單介紹一下JMX。JMX的全稱為Java Management Extensions。可以管理、監(jiān)控正在運行中的Java程序。常用于管理線程,內(nèi)存,日志Level,服務(wù)重啟,系統(tǒng)環(huán)境等。而Kafka底層也是基于Java的,所以我們也就可以使用JMX的標(biāo)準(zhǔn)來管理和監(jiān)控運行中的Kafka了。


          下面我們分別介紹它們的使用方法。


           Kafka Manager

          Kafka Manager的Github地址是https://github.com/yahoo/kafka-manager。這款監(jiān)控框架的好處在于監(jiān)控內(nèi)容相對豐富,既能夠?qū)崿F(xiàn)broker級常見的JMX監(jiān)控(比如出入站流量監(jiān)控),也能對consumer消費進度進行監(jiān)控(比如lag等)。另外用戶還能在頁面上直接對集群進行管理,比如分區(qū)重分配或創(chuàng)建topic——當(dāng)然這是一把雙刃劍,好在kafka manager自己提供了只讀機制,允許用戶禁掉這些管理功能。

          這里我們使用的版本是:kafka-manager-2.0.0.2.zip。安裝和配置非常簡單,按照下面的步驟配置Kafka Manager:


          (1)首先,需要在啟動Kafka集群的命令腳本中,增加JMX的相關(guān)參數(shù)。否則無法使用客戶端工具管理和監(jiān)控Kafka集群。這里我們以kafka101主機上運行的broker 0和broker 1為例,來為大家演示。進入kafka安裝目錄下的bin目錄

          cd /root/training/kafka_2.11-2.4.0/bin/


          (2)修改kafka-run-class.sh文件,找到“JMX setting”的位置(第176行)。增加JMX Server的配置信息。如圖7.1所示。


          -Djava.rmi.server.hostname=kafka101

          圖7.1 修改Kafka Manager的JMX Setting


          注意:

          由于在kafka101主機上將會啟動兩個broker,為了方便可以在命令終端中使用export命令設(shè)置JMX的端口地址;也可以像下面這樣把JMX的端口寫到kafka-server-start.sh腳本中,如圖7.2所示,修改第30行。


          export JMX_PORT="9999"

          圖7.2 設(shè)置JMX的端口


          (3)啟動Kafka Broker 0

          export JMX_PORT="9990"

          bin/kafka-server-start.sh config/server.properties &


          (4)重新開啟一個命令行終端,啟動Kafka Broker 1

          export JMX_PORT="9991"

          bin/kafka-server-start.sh config/server1.properties &


          (5)將Kafka Manager的壓縮包解壓至/root/training目錄

          unzip kafka-manager-2.0.0.2.zip -d ~/training/


          (6)進入Kafka Manager的conf目錄,并修改application.conf文件

          #這里我們指定ZooKeeper集群的地址

          kafka-manager.zkhosts="kafka101:2181,kafka102:2181,kafka103:2181"


          #將下面的這一行注釋掉

          #kafka-manager.zkhosts=${?ZK_HOSTS}


          (7)采用nohup的方式啟動Kafka Manager

          nohup bin/kafka-manager &

          也可以像下面這樣啟動Kafka Manager的時候,指定相關(guān)參數(shù):

          nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8080 &


          (8)啟動成功后,將輸出如下的日志信息,如圖7.3所示:


          圖7.3 啟動Kafka Manager


          可以看到,Kafka Manager將運行在9000端口上。


          (9)通過瀏覽器訪問9000端口,可以打開Kafka Manager的Web控制臺,如圖7.4所示:


          圖7.4 Kafka Manager的Web控制臺


          (10)選擇“Cluster”-->“Add Cluster”,添加一個新的Kafka集群。勾選“Enable JMX Polling”,并點擊“Save”。如圖7.5所示:


          圖7.5 添加Kafka集群


          (11)添加成功后,點擊“Go to Cluster View”,跳轉(zhuǎn)到Kafka 集群的首頁,如圖7.6所示:


          圖7.6 Kafka集群首頁


          在這里,可以看到當(dāng)前的Kafka集群中共存在2個Broker,即:broker 0和broker 1;還有3個Topics。


          (12)點擊Brokers的數(shù)字“2”,跳轉(zhuǎn)到Broker的監(jiān)控頁面上。在這里就可以實時監(jiān)控Kafka集群Broker的相關(guān)信息了。如Kafka集群的吞吐量(Bytes in /sec、Bytes out /sec)等等,如圖7.7所示:


          圖7.7 監(jiān)控Kafka Broker


          (13)圖7.8所示,展示了Kafka集群Topic的監(jiān)控信息。


          圖7.8 監(jiān)控Kafka Topic

           Kafka Tool


          Kafka Tool是用于管理和使用Apache Kafka集群的圖形應(yīng)用程序。它提供了一種直觀的界面風(fēng)格,可讓用戶快速查看Kafka集群中的對象以及集群主題中存儲的消息。它包含面向開發(fā)人員和管理員的功能,一些關(guān)鍵功能如下:

          快速查看所有Kafka集群,包括其broker,主題和消費者


          • 查看分區(qū)中消息的內(nèi)容并添加新消息

          • 查看消費者的偏移量,包括Apache Storm中的spout消費者

          • 以良好的格式顯示JSON和XML消息

          • 添加和刪除主題以及其他管理功能

          • 將單個消息從您的分區(qū)保存到本地硬盤驅(qū)動器

          • 編寫自己的插件,使您可以查看自定義數(shù)據(jù)格式

          • Kafka工具可在Windows,Linux和Mac OS上運行


          從Kafka Tool的官方網(wǎng)站(https://www.kafkatool.com/download.html)上,直接下載Kafka Tool。這里我們直接下載Kafka Tool 2.0.8的版本。如下圖7.9所示:


          圖7.9 下載Kafka Tool


          下載完成后,直接安裝啟動即可。圖7.10展示了啟動的初始界面。


          圖7.10 Kafka Tool的啟動界面


          添加一個Kafka Cluster集群,并測試。如圖7.11所示:


          圖7.11 添加Kafka集群


          點擊“是”,進入Kafka集群的首界面。如圖7.12所示:


          圖7.12 Kafka集群的首界面


          在這里可以看到Kafka集群中的Broker信息、Topics的信息以及Consumers消費者的信息。


          現(xiàn)在我們使用Kafka Tool來創(chuàng)建一個新的Topic。


          (1)選擇“Browsers”中集群的“Topics”節(jié)點,并在右邊的界面上點擊按鈕,添加一個新的Topic。

          (2)輸入Topic的名字、分區(qū)數(shù)、以及每個分區(qū)的副本數(shù)。這里我們新創(chuàng)建的Topic名稱是mytopic2,它由兩個分區(qū)組成,并且每個分區(qū)的副本數(shù)為。如圖7.13所示。


          圖7.13 Add Topic


          (3)點擊“Add”,將成功創(chuàng)建Topic,如圖7.14所示。


          圖7.14 成功創(chuàng)建Topic


          (4)現(xiàn)在我們使用Kafka Tool來接收mytopic2上的消息數(shù)據(jù)。選擇剛剛創(chuàng)建好的mytopic2的主題,并在右邊的窗口中選擇“Data”的頁面,如圖7.15所示。


          圖7.15 通過Kakfa Tool接收數(shù)據(jù)


          (5)啟動一個Kafka Producer的命令行終端,并發(fā)送一些消息。如圖7.16所示:

          bin/kafka-console-producer.sh --broker-list kafka101:9092 --topic mytopic2


          圖7.16 通過命令行發(fā)送數(shù)據(jù)

          (6)在Kafka Tool上,點擊接收消息。這里就可以看到剛才我們在Kafka Producer命令行上發(fā)送的消息。如圖7.17所示:


          圖7.17 在Kafka Tool上接收數(shù)據(jù)


          (7)這里的數(shù)據(jù)格式默認(rèn)是“Byte Array”,我們可以在Properties的設(shè)置里面將其修改為String,并點擊“Update”,如圖7.18所示:


          圖7.18 修改Topic的數(shù)據(jù)格式


          (8)回到Data頁面,這時候數(shù)據(jù)將按照正確的格式顯示,如圖7.19所示:


          圖7.19 顯示正確的數(shù)據(jù)


          KafkaOffsetMonitor


          KafkaOffsetMonitor是一個基于Web界面的管理平臺,可以用來實時監(jiān)控Kafka服務(wù)的Consumer以及它們所在的Partition中的Offset,我們可以瀏覽當(dāng)前的消費者組,并且每個Topic的所有Partition的消費情況都可以進行實時的監(jiān)控。KafkaOffsetMonitor可以從github上下載,地址是:https://github.com/quantifind/KafkaOffsetMonitor 。這里我們使用的是KafkaOffsetMonitor-assembly-0.2.0.jar


          KafkaOffsetMonitor的安裝啟動比較簡單。我們可以直接在kafka101的主機上執(zhí)行下面的指令:


          java -cp KafkaOffsetMonitor-assembly-0.2.0.jar \

          com.quantifind.kafka.offsetapp.OffsetGetterWeb \

          --zk kafka101:2181 \

          --port 8089 \

          --refresh 10.seconds \

          --retain 1.days


          其中:

          lcom.quantifind.kafka.offsetapp.OffsetGetterWeb是運行Web監(jiān)控的類

          • --zk用于指定ZooKeeper的地址

          • --port是Web運行端口

          • --refresh和--retain用于指定頁面數(shù)據(jù)刷新的時間以及保留數(shù)據(jù)的時間值


          打開瀏覽器訪問8089端口,就可以打開KafkaOffsetMonitor的首頁面,如圖7.20所示。


          圖7.20 KafkaOffsetMonitor首頁


          選擇“Topic List”,就可以監(jiān)控某個具體的Topic信息了,如圖7.21所示。


          圖7.21 通過KafkaOffsetMonitor監(jiān)控Topic

          JConsole


          JConsole(Java Monitoring and Management Console),一種基于JMX的可視化監(jiān)視、管理工具,從Java 5開始引入。JConsole是用Java寫的GUI程序,用來監(jiān)控VM,并可監(jiān)控遠(yuǎn)程的VM,非常易用,而且功能非常強。命令行里打 jconsole,就可以直接啟動了。


          這里我們方便,我們直接在Window上啟動JConsole。在CMD創(chuàng)建中直接輸入JConsole,如圖7.22所示。


          圖7.22 啟動JConsole


          JConsole的啟動界面如圖7.23所示。


          圖7.23  JConsole的啟動界面


          由于在前面配置Kafka Manager的時候,我們已經(jīng)啟用了broker 0和broker 1的JMX配置,所以這里可以直接通過JConsole連接到broker 0或者broker 1上。我們以broker 0 為例。選擇“遠(yuǎn)程進程”,并輸入broker 0的JMX地址,點擊“連接”,如圖7.24所示。


          kafka101:9990


          圖7.24 通過JConsole連接broker 0


          選擇“不安全的連接”,進入JConsole監(jiān)控的主界面,如圖7.25和圖7.26所示。


          圖7.25 不安全的連接


          圖7.26 JConsole的主頁面


          JConsole提供六個選項卡顯示應(yīng)用信息:


          (1)概覽選項卡:提供內(nèi)存使用的概述、運行的線程數(shù)量、創(chuàng)建的對象數(shù)量以及CPU使用情況。

          (2)內(nèi)存選項卡:顯示使用的內(nèi)存數(shù)量??梢赃x擇要監(jiān)視的內(nèi)存類型(堆、非堆或池)組合。

          (3)線程選項卡:顯示線程數(shù)量和每個線程的詳細(xì)信息。

          (4)類選項卡:顯示加載的對象數(shù)量的信息。

          (5)VM 概要選項卡:提供運行應(yīng)用的JVM概要。

          (6)MBean選項卡:顯示有關(guān)應(yīng)用的托管bean的信息。


          這里我們選擇“MBean選項卡”,就可以看到Kakfa相關(guān)的MBean信息,如圖7.27所示。


          圖7.27 通過JConsole監(jiān)控Kafka


          以上圖監(jiān)控的參數(shù)“MessagesInPerSec”為例,它表示的是Kafka集群消息的速率。關(guān)于所有的Kafka監(jiān)控的MBean信息,可以參考官方網(wǎng)站上的說明,地址是:http://kafka.apache.org/documentation/#monitoring

          監(jiān)控ZooKeeper


          前面提到,整個Kafka的狀態(tài)靠Zookeeper來維護,對于Zookeeper性能的監(jiān)控也成為了整個Kafka監(jiān)控計劃中一個必不可少的組成部分。在典型的Kafka集群中, Kafka通過Zookeeper管理集群配置,例如:選舉Leader,以及在Consumer Group發(fā)生變化時進行Rebalance;生產(chǎn)者Producer將消息發(fā)布到broker,Consumer從broker訂閱并消費消息。這些操作都離不開ZooKeeper。所以在Kafka集群的管理監(jiān)控中,ZooKeeper的監(jiān)控也就成為了非常重要的一部分。


          由于ZooKeeper本身也是由Java開發(fā)的應(yīng)用程序,我們當(dāng)然也可以前面提到的JMX的方式進行監(jiān)控,例如使用JConsole。圖7.28展示了通過JConsole監(jiān)控ZooKeeper MBean的監(jiān)控信息。


          圖7.28 通過JConsole監(jiān)控ZooKeeper


          這里我們也可以使用另一個客戶端工具ZooInspector監(jiān)控ZooKeeper。圖7.29展示了它的主界面。


          圖7.29 通過ZooInspector監(jiān)控ZooKeeper


           

          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久1234 | 久热思思| 色色草视频 | 国产免费高潮 | 囯产精品无码成人久久久 |