1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4947字,需瀏覽 10分鐘

         ·

        2022-05-26 16:21

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


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


        Kafka的度量指標主要有以下三類:


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

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

        3.消費者指標


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

        Kafka的監(jiān)控指標

        Broker度量指標

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


        • Kafka本身的指標

        • 主機層面的指標

        • JVM垃圾回收指標


        UnderReplicatedPartitions

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

        IsrShrinksPerSec

        IsrExpandsPerSec

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

        ActiveControllerCount

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

        OfflinePartitionsCount

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

        LeaderElectionRateAndTimeMs

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

        UncleanLeaderElectionsPerSec

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

        TotalTimeMs

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

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

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

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

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

        BytesInPerSec

        BytesOutPerSec

        Kafka的吞吐量


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

        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等待的時間


        消費者度量指標


        ConsumerLag MaxLag

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

        BytesPerSec

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

        MessagesPerSec

        消息的消費速度

        ZooKeeperCommitsPerSec

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

        MinFetchRate

        消費者最小拉取的速率


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

        使用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的各項指標。


        這里我們簡單介紹一下JMX。JMX的全稱為Java Management Extensions??梢怨芾怼⒈O(jiān)控正在運行中的Java程序。常用于管理線程,內(nèi)存,日志Level,服務(wù)重啟,系統(tǒng)環(huán)境等。而Kafka底層也是基于Java的,所以我們也就可以使用JMX的標準來管理和監(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——當然這是一把雙刃劍,好在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集群首頁


        在這里,可以看到當前的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)用程序。它提供了一種直觀的界面風格,可讓用戶快速查看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ù)格式默認是“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,我們可以瀏覽當前的消費者組,并且每個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)控遠程的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 為例。選擇“遠程進程”,并輸入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ù)量和每個線程的詳細信息。

        (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)用程序,我們當然也可以前面提到的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


        ?

        瀏覽 47
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            韩国hd高清xxxx视频 | 成人免费无码婬片在线观看免费 | 国产成人精品视频 | 在线免费视频一区二区 | 欧美日韩免费高清一区色橹橹 | 日韩w w w | 国产99久久久国产精品 | 国产做受 高潮短发巨乳 | 天天操天天日天天色 | 久久久夜色视频 |