Kafka Eagle分散式模式

語言: CN / TW / HK

1.概述

最近有同學留言,Kafka Eagle的分散式模式功能怎麼使用,如何部署安裝?今天筆者就為大家來詳細介紹一下Kafka Eagle的分散式模式功能的安裝和使用。

2.內容

首先,這裡我們需要說明一下,Kafka Eagle已經更名為EFAK(Eagle For Apache Kafka)。感謝Apache Kafka PMC的認可,EFAK將繼續提供和開發新功能,來滿足Kafka叢集和應用的相關監控和管理功能。

2.1 背景

當我們管理Kafka多叢集或者一個規模較大的Kafka叢集時,單機模式的EFAK部署時,執行的多執行緒任務,相關消費者、Topic、生產者、Broker & Zookeeper的監控指標等內容排程時,部署EFAK的伺服器如果配置較低,會造成很大的負載,對CPU的負載會很高。為了解決這類問題,EFAK開發了分散式模式的部署,可由多個低配置的伺服器來元件一個EFAK叢集。來對Kafka多叢集進行監控和管理。

2.2 基礎環境

部署EFAK所需要的基礎環境如下:

2.2.1 硬體和作業系統

  • 作業系統:Linux系統即可(Ubuntu、CentOS等)
  • JDK:JDK8以上
  • CPU:1核以上
  • 記憶體:2GB以上

2.2.2 EFAK安裝包

EFAK安裝包,目前官網上以及釋出了最新的v2.0.9版本,支援分散式模式部署。可以直接下載到Linux伺服器進行安裝和部署使用。如果需要自行編譯部署,可以到Github下載原始碼進行編譯部署:

2.3 安裝部署

EFAK分散式模式部署,這裡以5個節點為例子(1個Master和4個Slave),各個節點的角色如下如所示:

2.3.1 配置EFAK環境

首先,我們定義一個伺服器為Master節點,在Master節點上下載EFAK安裝包,並配置EFAK所需要的環境變數,具體內容如下所示:

# 編輯環境變數檔案
vi ~/.bash_profile

# 新增如下內容

# 新增JDK環境,建議使用JDK8以上
export JAVA_HOME=/data/soft/new/jdk

# 新增EFAK環境
export KE_HOME=/data/soft/new/efak

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

然後執行source ~/.bash_profile命令使配置環境變數立即生效。

2.3.2 配置EFAK系統檔案

在EFAK的conf目錄下有兩個配置系統的檔案,它們分別是:

  • system-config.properties:用來配置EFAK系統相關內容,比如啟動埠、Zookeeper地址、Kafka安全認證資訊、資料庫儲存地址等;
  • works:Slave節點地址(建議直接使用IP)。

1.配置works檔案

works儲存節點IP地址如下:

192.168.31.75
192.168.31.98
192.168.31.251
192.168.31.88

2.配置system-config.properties檔案

EFAK配置資訊如下所示:

######################################
# 配置Kafka叢集別名和Zookeeper訪問地址
######################################
efak.zk.cluster.alias=cluster1
cluster1.zk.list=192.168.31.127:2181

######################################
# Zookeeper是否啟用ACL
######################################
cluster1.zk.acl.enable=false
cluster1.zk.acl.schema=digest
cluster1.zk.acl.username=test
cluster1.zk.acl.password=test123

######################################
# 如果一個Kafka叢集規模較大,可以配置該引數
# 例如:配置閥值為20,若當前Kafka叢集節點超過20個,將啟用離線統計
######################################
cluster1.efak.broker.size=20

######################################
# Zookeeper客戶端執行緒數,單機模式設定16
# 分散式模式可以設定為4或者8(EFAK節點數大於5設定為4,若小於5設定為8即可)
######################################
kafka.zk.limit.size=8

######################################
# EFAK Web頁面啟動埠
######################################
efak.webui.port=8048

######################################
# EFAK 是否啟用分散式模式
######################################
efak.distributed.enable=true

# 在master節點上設定角色為master,其他節點設定為slave。
# 有個小技巧,就是從master節點同步配置到slave節點時,
# 將該屬性先設定為slave,然後同步完成後,
# 將master節點上的slave值修改為master即可
efak.cluster.mode.status=master

# 設定master節點的IP地址
efak.worknode.master.host=192.168.31.199

# 設定一個可用的埠供WorkNodeServer使用
efak.worknode.port=8085

######################################
# kafka jmx 是否啟用了ACL
######################################
cluster1.efak.jmx.acl=false
cluster1.efak.jmx.user=keadmin
cluster1.efak.jmx.password=keadmin123
cluster1.efak.jmx.ssl=false
cluster1.efak.jmx.truststore.location=/data/ssl/certificates/kafka.truststore
cluster1.efak.jmx.truststore.password=ke123456

######################################
# kafka offset 儲存方式,
# 目前Kafka基本都是儲存在Kafka的topic中,
# 可保留該預設值不變
######################################
cluster1.efak.offset.storage=kafka

######################################
# kafka jmx 地址,預設Apache釋出的Kafka基本是這個預設值,
# 對於一些公有云Kafka廠商,它們會修改這個值,
# 比如會將jmxrmi修改為kafka或者是其它的值,
# 若是選擇的公有云廠商的Kafka,可以根據實際的值來設定該屬性
######################################
cluster1.efak.jmx.uri=service:jmx:rmi:///jndi/rmi://%s/jmxrmi

######################################
# kafka監控是否開啟,以及儲存的監控資料保留時間天數
######################################
efak.metrics.charts=true
efak.metrics.retain=15

######################################
# kafka sql 查詢topic的單分割槽最近的條數,
# 以及在頁面預覽topic資料的最大記錄條數
######################################
efak.sql.topic.records.max=5000
efak.sql.topic.preview.records.max=10

######################################
# 刪除topic的金鑰,僅供管理員角色使用
######################################
efak.topic.token=keadmin

######################################
# kafka sasl 安全認證是否開啟
######################################
cluster1.efak.sasl.enable=false
cluster1.efak.sasl.protocol=SASL_PLAINTEXT
cluster1.efak.sasl.mechanism=SCRAM-SHA-256
cluster1.efak.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="kafka" password="kafka-eagle";
cluster1.efak.sasl.client.id=
cluster1.efak.blacklist.topics=
cluster1.efak.sasl.cgroup.enable=false
cluster1.efak.sasl.cgroup.topics=

######################################
# kafka ssl 安全認證是否開啟
######################################
cluster1.efak.ssl.enable=false
cluster1.efak.ssl.protocol=SSL
cluster1.efak.ssl.truststore.location=
cluster1.efak.ssl.truststore.password=
cluster1.efak.ssl.keystore.location=
cluster1.efak.ssl.keystore.password=
cluster1.efak.ssl.key.password=
cluster1.efak.ssl.endpoint.identification.algorithm=https
cluster1.efak.blacklist.topics=
cluster1.efak.ssl.cgroup.enable=false
cluster1.efak.ssl.cgroup.topics=

######################################
# 生產環境建議使用MySQL來儲存相關資料
######################################
efak.driver=com.mysql.cj.jdbc.Driver
efak.url=jdbc:mysql://localhost:3306/ke_prd?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
efak.username=root
efak.password=123456

2.3.3 分發EFAK安裝包和系統環境

1.同步EFAK系統環境

# 同步系統環境
for i in `cat $KE_HOME/conf/works`;do scp ~/.bash_profile $i:~/;done

2.同步EFAK安裝包到Slave節點

# 如果你的$KE_HOME環境地址為/data/soft/new/efak
for i in `cat $KE_HOME/conf/works`;do scp -r $KE_HOME $i:/data/soft/new/;done

然後,修改Master節點上的屬性值 efak.cluster.mode.status ,將Master節點上該屬性值slave修改為master即可。其他Slave節點無需改動。

2.3.4 啟動EFAK分散式叢集

EFAK分散式模式新增了ke.sh cluster命令,該命令支援如下引數:

  • ke.sh cluster start:啟動EFAK分散式叢集;
  • ke.sh cluster status:檢視EFAK分散式叢集狀態;
  • ke.sh cluster stop:停止EFAK分散式叢集
  • ke.sh cluster restart:重啟EFAK分散式叢集

當我們完成EFAK系統環境和安裝包的分發後,就可以執行ke.sh cluster start啟動命令了。

# 啟動 EFAK 分散式模式
ke.sh cluster start

具體啟動截圖如下所示:

執行ke.sh cluster status命令檢視各個節點的狀態:

# 檢視節點狀態
ke.sh cluster status

執行上述命令,具體截圖如下所示:

2.3.5 新增EFAK節點監控

在EFAK分散式模式下,新增監控EFAK各個節點的功能(單擊模式下也可以檢視Master節點相關指標),具體監控內容如下圖所示:

3.總結

如果是Kafka叢集規模較大或者管理的Kafka叢集有多個,可以使用EFAK的分散式模式部署。如果管理的Kafka叢集規模較小,Topic數量、消費者應用等較少,可以使用EFAK的單機模式部署即可。

4.結束語

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

另外,博主出書了《 Kafka並不難學 》和《 Hadoop大資料探勘從入門到進階實戰 》,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買博主的書進行學習,在此感謝大家的支援。關注下面公眾號,根據提示,可免費獲取書籍的教學視訊。