文章目錄
- 前言
- 安裝步驟
- 下載解壓
- 編輯組態檔
- 配置環境變數
- 服務啟停等操作
- 配置Metrics
- 簡單使用
- 安裝問題
- 記憶體不夠
- 看不到資料
- 參考
前言
EFAK(Eagle For Apache Kafka)是一個簡單、高性能的Kafka集群監控系統,實作了監控、可視化操作Topic/Zookeeper、SQL查詢、告警等功能,它以前的名字叫Kafka Eagle,
我們重點看看如何安裝以及簡單使用它,
kafka 版本支持:
0.8.2.x,0.9.x,0.10.x,0.11.x,1.x,2.x.支持平臺:
Mac OS X,Linux,Windows.支持的JDK:
JDK8+
安裝步驟
下載解壓
執行后下載目錄是~/soft/kafka,可執行程式目錄是/opt/soft/efak-web-2.0.8,
echo "創建下載目錄" > /dev/null
mkdir -p ~/soft/kafka
echo "下載到~/soft/kafka" > /dev/null
curl -o ~/soft/kafka/kafka-eagle-bin-2.0.8.tar.gz https://codeload.github.com/smartloli/kafka-eagle-bin/tar.gz/v2.0.8
echo "創建解壓目錄" > /dev/null
mkdir -p /opt/soft
echo "解壓到當前目錄,真正的包還在解壓檔案夾下" > /dev/null
tar -xf ~/soft/kafka/kafka-eagle-bin-2.0.8.tar.gz
echo "解壓到/opt/soft" > /dev/null
tar -xf ~/soft/kafka/kafka-eagle-bin-2.0.8/efak-web-2.0.8-bin.tar.gz -C /opt/soft
編輯組態檔
我們這里演示只使用了必要的引數進行配置,詳細配置參考Kafka-eagle - 配置檔案,資料庫得提前創建好,
需要注意的是cluster1.zk.list=配置的值需要跟Kafka組態檔server.properties中引數zookeeper.connect=配置得一樣,包括后面的命名空間/kafka,
echo "備份組態檔" > /dev/null
cp /opt/soft/efak-web-2.0.8/conf/system-config.properties /opt/soft/efak-web-2.0.8/conf/system-config.properties.bak
echo "覆寫組態檔為以下內容" > /dev/null
echo '
# Kafka使用的Zookeeper集群別名,多個集群用逗號分隔,后續針對不同集群配置都需要別名作前綴
efak.zk.cluster.alias=cluster1
# Kafka配置的Zookeeper集群客戶端訪問地址
cluster1.zk.list=node1:2181,node2:2181,node3:2181/kafka
# efak的Web界面訪問埠
efak.webui.port=8048
# EFAK跟Zookeeper的最大連接數
kafka.zk.limit.size=25
# 開啟metrics
efak.metrics.charts=true
# 保留時間15天
efak.metrics.retain=15
# kafka jmx uri
cluster1.efak.jmx.uri=service:jmx:rmi:///jndi/rmi://%s/jmxrmi
# MySQL配置
efak.driver=com.mysql.cj.jdbc.Driver
efak.url=jdbc:mysql://192.168.2.33:3306/efak?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
efak.username=root
efak.password=pwd888888' > /opt/soft/efak-web-2.0.8/conf/system-config.properties
配置環境變數
環境變數在腳本中會使用到,所以必須配置下,也能簡便我們命令列操作,
echo "追加環境變數KE_HOME" > /dev/null
echo '
export KE_HOME=/opt/soft/efak-web-2.0.8
export PATH=$PATH:$KE_HOME/bin' >> /etc/profile
echo "使環境變數生效" > /dev/null
source /etc/profile
服務啟停等操作
使用bin目錄下的腳本ke.sh實作所有操作,命令格式為ke.sh [選項],選項有start|status|stop|restart|stats對應啟動|服務狀態|停止|重啟|查看資源占用,參考 Kafka-eagle - shell,如:
echo "啟動" > /dev/null
ke.sh start
控制臺日志在logs/ke_console.out,是一個軟鏈接指向了另一個真實日志路徑,

啟動成功后控制臺會列印出用戶名密碼和HTTP訪問地址相關資訊,要注意的是,啟動失敗也會列印出這些資訊,所以得通過鏈接訪問成功了才能判斷啟動沒問題,

配置Metrics
這個主要是為了開啟Metrics和BScreen兩個功能來實作Kafka訊息的數量、請求的數量、處理時間等資料可視化,
這個功能是通過Java管理擴展(Java Management Extensions,JMX)實作監控的,參考Kafka-eagle - Metrics,
EFAK組態檔system-config.properties需要配置下面相關引數,
# 開啟metrics
efak.metrics.charts=true
# 保留時間15天
efak.metrics.retain=15
# kafka jmx uri
cluster1.efak.jmx.uri=service:jmx:rmi:///jndi/rmi://%s/jmxrmi
開啟Kafka的JMX功能,編輯Kafka啟動腳本kafka-server-start.sh,修改if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then中的內容為如下,其實就是設定相關的JVM啟動選項,其中JMX_PORT可以自定義,EFAK會自己發現,
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"
fi


Zookeeper版本3.5以上需要修改啟動腳本zkServer.sh,在77行后添加以下內容,
ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"

在【Cluster / ZK & Kafka】中可以看到Kafka節點,以及JMX相關資訊,其中JMX Port設定成不一樣它也自動發現了,

簡單使用
通過瀏覽器用IP+埠號(如:http://192.168.0.1:8048/)訪問主頁,需要用戶名和密碼登陸,相關資訊在啟動日志中都有給出,

如果配置了Metrics,選單欄中【Metrics】和【BScreen】都可以看到資料,


安裝問題
記憶體不夠
如果啟動失敗可以看日志來分析原因,比如我當時報錯Cannot allocate memory,因為機器記憶體不夠,
cat $KE_HOME/logs/ke_console.out
Java HotSpot? 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000080000000, 2147483648, 0) failed; error=‘Cannot allocate memory’ (errno=12)
而通過看啟動腳本內容(ke.sh)發現啟動的JVM選項中指定了堆記憶體大小為2G,
解決辦法:將腳本中堆記憶體引數改小,或者增加服務器記憶體,

看不到資料
【Dashboard】【ZK & Kafka】等功能沒有資料,

【Cluster / ZkCli】中也能看到ZK連接狀態為DISCONNECTED,

通過日志可以看到類似下面的錯誤,通過錯誤提示在原始碼中定位后發現是因為kafka.zk.limit.size(EFAK跟Zookeeper的最大連接數)沒有設定,初始化后連接池為0,所以報錯,
ERROR [KafkaZKPoolUtils.http-nio-8048-exec-8] - Error initializing zookeeper, msg is
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:659)
at java.util.ArrayList.get(ArrayList.java:435)
at org.smartloli.kafka.eagle.common.util.KafkaZKPoolUtils.getZkClient(KafkaZKPoolUtils.java:128)Kafka cluster[cluster1.zk.list] address has null.
Get all brokers info has error,msg is
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:659)
at java.util.ArrayList.get(ArrayList.java:435)
at org.smartloli.kafka.eagle.common.util.KafkaZKPoolUtils.getZkClient(KafkaZKPoolUtils.java:128)
解決辦法:在EFAK組態檔system-config.properties中配置這個引數的值,比如像配置模板一樣配置成25,然后重啟服務即可,
參考
GitHub -EFAK
Kafka-eagle - 官網
Kafka-eagle - Install on Linux/macOS
Kafka-eagle - 下載頁
Kafka-eagle - 配置檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375794.html
標籤:其他
下一篇:hadoop環境搭建(四)
