天天看點

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

1.概述

最近有同學留言回報了使用Kafka監控工具Kafka Eagle的一些問題,這裡筆者特意整理了這些問題。并且希望通過這篇部落格來解答這些同學的在使用Kafka Eagle的時候遇到的一些困惑,同時也給出一些定位分析Kafka Eagle異常的時的解決辦法。

2.内容

2.1 背景

在使用Kafka Eagle監控系統之前,筆者簡單的介紹一下這款工具的用途。Kafka Eagle監控系統是一款用來監控Kafka叢集的工具,目前更新的版本是v1.2.3,支援管理多個Kafka叢集、管理Kafka主題(包含檢視、删除、建立等)、消費者組合消費者執行個體監控、消息阻塞告警、Kafka叢集健康狀态檢視等。目前Kafka Eagle v1.2.3整個系統所包含的功能,這裡筆者給繪制成了一個圖,結果如下圖所示:

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

2.2 安裝

接下來,我們開始安裝Kafka Eagle系統,安裝之前,我們需要準備好Kafka Eagle安裝包。這裡有2種方式:

  • 下載下傳編譯好的安裝包
  • 下載下傳源代碼,然後自行編譯安裝

下面分别介紹這2種方式。

2.2.1 直接下載下傳安裝包

 可以直接通路Kafka Eagle安裝包下載下傳位址:

http://download.smartloli.org/

,然後點選下載下傳按鈕,等待下載下傳完成即可。下載下傳界面如下圖所示:

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

 2.2.2 下載下傳源代碼,自行編譯安裝

Kafka Eagle系統的源代碼托管在Github上,大家可以通路

https://github.com/smartloli/kafka-eagle

來擷取源代碼。Kafka Eagle源代碼是由Maven工程來管理的,是以,在編譯Kafka Eagle源代碼之前,需要在本地開發環境中準備好你的Maven環境。

Maven安裝比較簡單,這裡給大家介紹安裝Maven的步驟:

# 步驟1:下載下傳Maven安裝包
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

# 步驟2:解壓Maven安裝包
tar -zxvf apache-maven-3.5.4-bin.tar.gz

# 步驟3:重命名并移動到指定位置
mv apache-maven-3.5.4 /usr/local/maven

# 步驟4:配置Maven環境編輯
vi ~/.bash_profile

export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin

# 步驟5:執行source指令讓環境變量立即生效
source ~/.bash_profile

# 步驟6:驗證Maven是否安裝成功
mvn -v

# 如果能列印Maven版本資訊,則安裝成功      

然後,進入到Kafka Eagle源代碼根目錄,在根目錄中有一個build.sh的腳本,執行該腳本進行源代碼編譯。編譯成功後,控制台會列印相關資訊,如下圖所示:

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

2.2.3 配置Kafka Eagle

準備好Kafka Eagle安裝包後,接下來我們就可以進行安裝了。其實,Kafka Eagle的安裝是很簡單的,當初設計這個系統就是遵循簡單、易用的原則來的。但是,很多同學在安裝的過程當中卻遇到了很多各式各樣的問題。其實,在官方使用手冊的安裝一節中,介紹的也很詳細。官方使用手冊位址:

http://ke.smartloli.org/

文檔托管在Gitbook,這裡需要注意的是,可能有些同學回報說通路不了,如果網絡有波動,偶爾可能需要使用代理來通路。

接下來,我們就開始配置Kafka Eagle系統,步驟如下:

1. 配置JAVA_HOME和KE_HOME

由于源代碼核心實作采用的是Java語言,是以需要配置JDK環境,建議采用JDK8以上。配置内容如下:

vi ~/.bash_profile
export JAVA_HOME=/usr/local/jdk8
export KE_HOME=/data/soft/new/kafka-eagle

export PATH=$PATH:$JAVA_HOME/bin:$KE_HOME/bin      

然後,執行source ~/.bash_profile指令讓指令立即生效。如果不配置環境變量,可能在啟動Kafka Eagle腳本ke.sh時抛出如下異常,異常資訊如下:

[2018-07-26 18:41:51] Error: The KE_HOME environment variable is not defined correctly.
[2018-07-26 18:41:51] Error: This environment variable is needed to run this program.

[2018-07-26 18:41:51] Error: The JAVA_HOME environment variable is not defined correctly.
[2018-07-26 18:41:51] Error: This environment variable is needed to run this program.      

2. 配置system-config.properties檔案

該檔案在$KE_HOME/conf/目錄,配置内容如下:

######################################
# 配置多個Kafka叢集所對應的Zookeeper
######################################
kafka.eagle.zk.cluster.alias=cluster1,cluster2
cluster1.zk.list=dn1:2181,dn2:2181,dn3:2181
cluster2.zk.list=tdn1:2181,tdn2:2181,tdn3:2181

######################################
# 設定Zookeeper線程數
######################################
kafka.zk.limit.size=25

######################################
# 設定Kafka Eagle浏覽器通路端口
######################################
kafka.eagle.webui.port=8048

######################################
# 如果你的offsets存儲在Kafka中,這裡就配置
# 屬性值為kafka,如果是在Zookeeper中,可以
# 注釋該屬性。一般情況下,Offsets的也和你消
# 費者API有關系,如果你使用的Kafka版本為0.10.x
# 以後的版本,但是,你的消費API使用的是0.8.2.x
# 時的API,此時消費者依然是在Zookeeper中
######################################
cluster1.kafka.eagle.offset.storage=kafka
######################################
# 如果你的叢集一個是新版本(0.10.x以上),
# 一個是老版本(0.8或0.9),可以這樣設定,
# 如果都是新版本,那麼可以将值都設定成kafka
######################################
cluster2.kafka.eagle.offset.storage=zookeeper

######################################
# 是否啟動監控圖表,預設是不啟動的
######################################
kafka.eagle.metrics.charts=false

######################################
# 在使用Kafka SQL查詢主題時,如果遇到錯誤,
# 可以嘗試開啟這個屬性,預設情況下,不開啟
######################################
kafka.eagle.sql.fix.error=false

######################################
# 郵件伺服器設定,用來告警
######################################
kafka.eagle.mail.enable=false
kafka.eagle.mail.sa=
kafka.eagle.mail.username=
kafka.eagle.mail.password=
kafka.eagle.mail.server.host=
kafka.eagle.mail.server.port=

######################################
# 設定告警使用者,多個使用者以英文逗号分隔
######################################
[email protected]


######################################
# 超級管理者删除主題的Token
######################################
kafka.eagle.topic.token=keadmin

######################################
# 如果啟動Kafka SASL協定,開啟該屬性
######################################
kafka.eagle.sasl.enable=false
kafka.eagle.sasl.protocol=SASL_PLAINTEXT
kafka.eagle.sasl.mechanism=PLAIN

######################################
# Kafka Eagle預設存儲在Sqlite中,如果要使用
# MySQL可以替換驅動、使用者名、密碼、連接配接位址
######################################
#kafka.eagle.driver=com.mysql.jdbc.Driver
#kafka.eagle.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
#kafka.eagle.username=root
#kafka.eagle.password=123456

kafka.eagle.driver=org.sqlite.JDBC
kafka.eagle.url=jdbc:sqlite:/Users/dengjie/workspace/kafka-egale/db/ke.db
kafka.eagle.username=root
kafka.eagle.password=root      

3. 啟動Kafka Eagle

配置完成後,可以執行Kafka Eagle腳本ke.sh。如果首次執行,需要給該腳本賦予執行權限,指令如下:

chmod +x $KE_HOME/bin/ke.sh      

在ke.sh腳本中,支援以下指令:

指令 說明
ke.sh start 啟動Kafka Eagle系統
ke.sh stop 停止Kafka Eagle系統
ke.sh restart 重新開機Kafka Eagle系統
ke.sh status 檢視Kafka Eagle系統運作狀态
ke.sh stats 統計Kafka Eagle系統占用Linux資源情況
ke.sh find [ClassName] 檢視Kafka Eagle系統中的類是否存在

3.預覽

在回報出現頻率最多的問題,就是Consumer子產品沒有資料展示、趨勢監控圖沒有資料、Kafka SQL查詢Topic沒有資料。下面圍繞這3個問題來給大家示範,以及解釋什麼情況下出現這種情況。

3.1 Consumer子產品展示

啟動一個消費者程式,然後進入到Consumer子產品,截圖如下:

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語
Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

這裡需要注意的時,Kafka在0.10.x之後的版本和之前的版本底層設計有了變化,在之前的版本消費者資訊是存儲在Zookeeper中的,在0.10.x版本之後,預設存儲到了Kafka内部主題中,隻保留了中繼資料資訊存儲在Zookeeper中,例如:Kafka Broker位址、Topic名稱、分區等資訊。

是不是我使用的是Kafka 0.10.x之後的版本(如0.10.0、1.0.x、1.x等),然後配置屬性kafka.eagle.offset.storage=kafka,啟動消費者,就可以看到消費者資訊呢?不一定的,還有一個關鍵因素決定Kafka Eagle系統是否可以展示你消費者程式資訊,那就是消費者API的使用。

如果你使用的Kafka 0.10.x之後的版本,然後消費者API也是使用的最新的寫法,那麼自然你的消費者資訊會被記錄到Kafka内部主題中,那麼此時你設定kafka.eagle.offset.storage=kafka這個屬性,Kafka Eagle系統可以完美展示你的消費者使用情況。

但是,如果你雖然使用的是Kafka 0.10.x之後的版本,但是你使用的消費者API還是0.8.2.x或是0.9.x時的寫法,此時的消費者資訊是會被記錄到Zookeeper中進行存儲,那麼此時你需要設定kafka.eagle.offset.storage=zookeeper或者注釋掉該屬性,在通路Kafka Eagle系統就可以檢視到你的消費者詳情了。

3.2. 監控趨勢圖

 Kafka系統預設是沒有開啟JMX端口的,是以Kafka Eagle的監控趨勢圖預設采用不啟用的方式,即kafka.eagle.metrics.charts=false。如果需要檢視監控趨勢圖,需要開啟Kafka系統的JMX端口,設定該端口在$KAFKA_HOME/bin/kafka-server-start.sh腳本中,設定内容如下:

vi kafka-server-start.sh

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-server -Xms2G -Xmx2G -XX:PermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70"
    export JMX_PORT="9999"
    #export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi      

需要注意的時,這裡的端口不一定非要設定成9999,端口隻有可用,均可。Kafka Eagle系統會自動擷取這個JMX端口,采集結果如下:

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

3.3 Kafka SQL查詢Topic

還有一部分同學在Kafka Eagle系統的SQL查詢Topic時,會出現查詢不到資料的情況。這裡查詢不到資料可能情況有多種,首先需要排除Kafka叢集因素,確定Kafka叢集運作正常,Topic能夠正常通路,并且Topic中是有資料的。

在排除一些主觀因素後,回到Kafka Eagle系統應用層面,如果出現這種問題,可以嘗試開啟屬性kafka.eagle.sql.fix.error=true,這個屬性預設是不開啟的。正常情況下使用Kafka SQL查詢Topic,傳回結果如下圖所示:

Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語
Kafka監控系統Kafka Eagle剖析1.概述2.内容3.預覽4.總結5.結束語

4.總結

 另外,如果在使用Kafka Eagle系統中遇到其他問題,可以檢視$KE_HOME/logs/ke_console.out日志來分析具體的異常資訊,一般都會提示具體的錯誤,大家可以根據錯誤提示來進行解決。

5.結束語

這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!

另外,部落客出書了《Hadoop大資料挖掘從入門到進階實戰》,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買部落客的書進行學習,在此感謝大家的支援。

聯系方式:

郵箱:[email protected]

Twitter:

https://twitter.com/smartloli

QQ群(Hadoop - 交流社群1):

424769183

溫馨提示:請大家加群的時候寫上加群理由(姓名+公司/學校),友善管理者稽核,謝謝!

熱愛生活,享受程式設計,與君共勉!

作者:哥不是小蘿莉 [ 關于我 ][ 犒賞

出處: http://www.cnblogs.com/smartloli/

轉載請注明出處,謝謝合作!