Kafka監控系統Kafka Eagle剖析

1.概述

最近有同窗留言反饋了使用Kafka監控工具Kafka Eagle的一些問題,這裏筆者特地整理了這些問題。而且但願經過這篇博客來解答這些同窗的在使用Kafka Eagle的時候遇到的一些困惑,同時也給出一些定位分析Kafka Eagle異常的時的解決辦法。mysql

2.內容

2.1 背景

在使用Kafka Eagle監控系統以前,筆者簡單的介紹一下這款工具的用途。Kafka Eagle監控系統是一款用來監控Kafka集羣的工具,目前更新的版本是v1.2.3,支持管理多個Kafka集羣、管理Kafka主題(包含查看、刪除、建立等)、消費者組合消費者實例監控、消息阻塞告警、Kafka集羣健康狀態查看等。目前Kafka Eagle v1.2.3整個系統所包含的功能,這裏筆者給繪製成了一個圖,結果以下圖所示:git

2.2 安裝

接下來,咱們開始安裝Kafka Eagle系統,安裝以前,咱們須要準備好Kafka Eagle安裝包。這裏有2種方式:github

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

下面分別介紹這2種方式。web

2.2.1 直接下載安裝包

 能夠直接訪問Kafka Eagle安裝包下載地址:http://download.smartloli.org/,而後點擊下載按鈕,等待下載完成便可。下載界面以下圖所示:sql

 

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

Kafka Eagle系統的源代碼託管在Github上,你們能夠訪問https://github.com/smartloli/kafka-eagle來獲取源代碼。Kafka Eagle源代碼是由Maven工程來管理的,因此,在編譯Kafka Eagle源代碼以前,須要在本地開發環境中準備好你的Maven環境。apache

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的腳本,執行該腳本進行源代碼編譯。編譯成功後,控制檯會打印相關信息,以下圖所示:bash

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= ###################################### # 設置告警用戶,多個用戶以英文逗號分隔 ###################################### kafka.eagle.alert.users=smartloli.org@gmail.com ###################################### # 超級管理員刪除主題的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在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端口,採集結果以下:

3.3 Kafka SQL查詢Topic

還有一部分同窗在Kafka Eagle系統的SQL查詢Topic時,會出現查詢不到數據的狀況。這裏查詢不到數據可能狀況有多種,首先須要排除Kafka集羣因素,確保Kafka集羣運行正常,Topic可以正常訪問,而且Topic中是有數據的。

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

 

 

4.總結

 另外,若是在使用Kafka Eagle系統中遇到其餘問題,能夠查看$KE_HOME/logs/ke_console.out日誌來分析具體的異常信息,通常都會提示具體的錯誤,你們能夠根據錯誤提示來進行解決。

5.結束語

這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!

另外,博主出書了《Hadoop大數據挖掘從入門到進階實戰》,喜歡的朋友或同窗, 能夠在公告欄那裏點擊購買連接購買博主的書進行學習,在此感謝你們的支持。

相關文章
相關標籤/搜索