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下載下傳源代碼進行編譯部署:
- 方式一:官網下載下傳v2.0.9安裝包
- 方式二:Github下載下傳源代碼,參考README說明進行編譯
2.3 安裝部署
EFAK分布式模式部署,這裡以5個節點為例子(1個Master和4個Slave),各個節點的角色如下如所示:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0cDO4IjN0cjNtQDMwUDMxQjMxYjMyETMyAjMtUDN3YjN28CXyETMyAjMvwVN0cjN2YzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
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大資料挖掘從入門到進階實戰》,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買部落客的書進行學習,在此感謝大家的支援。關注下面公衆号,根據提示,可免費擷取書籍的教學視訊。
聯系方式:
Twitter:https://twitter.com/smartloli
QQ群(Hadoop - 交流社群1):424769183
QQ群(Kafka并不難學): 825943084
溫馨提示:請大家加群的時候寫上加群理由(姓名+公司/學校),友善管理者稽核,謝謝!