Kafka Eagle 原始碼解讀

2021-07-28 05:04:30 字數 2180 閱讀 5623

在《kafka 訊息監控 - kafka eagle》一文中,簡單的介紹了 kafka eagle這款監控工具的作用,截圖預覽,以及使用詳情。今天筆者通過其原始碼來解讀實現細節。目前該專案已託管於 github 之上,作者編寫了使用手冊,告知使用者如何安裝,部署,啟動該系統。但對於實現的細節並未在參考手冊中詳細指出。這裡,筆者通過本篇博文,來詳細解讀其實現細節。相關資料文獻位址如下所示:

截止到版本 kafka eagle v1.1.1 支援監控0.8.2.x(存放消費資訊於zookeeper)以及 0.10.x(存放消費資訊於kafka的topic中)。對於前者,從zookeeper中獲取訊息資訊,難度不大,編寫zookeeper客戶端實現**即可,該版本在zookeeper下的儲存結構樹如下圖所示:

}其他監控資訊可以按照zookeeper中結構樹路徑獲取。如下圖所示:

然而,對於新版本,官方預設將消費資訊遷移到kafka的topic中,這樣原來的介面只能獲取topic,broker等資訊,對於消費的資訊,我們需要從kafka中乙個叫__consumer_offsets的topic中獲取。為了相容0.8.2.x版本的kafka,這裡在kafka eagle中另外啟動乙個rpcserver來貢獻__consumer_offsets中的消費資訊。消費__consumer_offsets這個topic時,需要指定該內部topic不暴露給consumer,將 exclude.internal.topics 設定為 false 即可。這樣我們通過乙個 kafka.eagle.offset.storage 開關來控制系統獲取監控元資料的走向。獲取流程如下圖所示:

當消費的資訊存放於zookeeper中,我們可以直接從consumer模組下直接獲取對應的owner,但是在kafka的topic中,我們需要編碼來間接的獲取。這裡,我們需要知道 kafka 的owner的組成規則,其規則由 group+conusmerhostaddress+timespan+uuid+partitionid組成,實現細節可參考原始碼,介面展示如下圖所示:

關於kafka sql,旨在使用sql來快速視覺化topic的相關資訊,目前 kafka sql 實現的功能包含有展示某乙個topic的partition,offset,以及其對應的訊息記錄,若不加limit條件限制,預設展示該topic下最新的5000條記錄,詳細實現細節,可參看原始碼,預覽截圖如下所示:

查詢結果,如下圖所示:

kafka eagle 目前是支援多集群監控,所謂多集群,是指多個zookeeper集群下的kafka集群,通過切換session來管理不同的zookeeper集群下的kafka集群,細節參看原始碼。管理介面如下圖所示:

kafka eagle總體實現思路基本如上所述。針對,kafka 0.10.x版本,kafka eagle監控部分模組不展示的問題,這裡在啟動 kafka eagle之前,預設啟動乙個系統consumer來消費kafka.eagle該group下的__system.topic__,保證__consumer_offsets是有資料可供獲取的。

Kafka Eagle 原始碼解讀

在 kafka 訊息監控 kafka eagle 一文中,簡單的介紹了 kafka eagle這款監控工具的作用,截圖預覽,以及使用詳情。今天筆者通過其原始碼來解讀實現細節。目前該專案已託管於 github 之上,作者編寫了使用手冊,告知使用者如何安裝,部署,啟動該系統。但對於實現的細節並未在參考手...

Kafka Eagle 原始碼解讀

在 kafka 訊息監控 kafka eagle 一文中,簡單的介紹了 kafka eagle這款監控工具的作用,截圖預覽,以及使用詳情。今天筆者通過其原始碼來解讀實現細節。目前該專案已託管於 github 之上,作者編寫了使用手冊,告知使用者如何安裝,部署,啟動該系統。但對於實現的細節並未在參考手...

Kafka Eagle 原始碼解讀

在 kafka 訊息監控 kafka eagle 一文中,簡單的介紹了 kafka eagle這款監控工具的作用,截圖預覽,以及使用詳情。今天筆者通過其原始碼來解讀實現細節。目前該專案已託管於 github 之上,作者編寫了使用手冊,告知使用者如何安裝,部署,啟動該系統。但對於實現的細節並未在參考手...