03.01 別人家的 InfluxDB 實戰 + 源碼剖析

1


前幾次的分享,我們多次提到了下圖中 Metrics 指標監控的 Prometheus、Grafana,而且 get 到了 influxdata 旗下的 InfluxDB 的入門技能。


別人家的 InfluxDB 實戰 + 源碼剖析


本次,我們去看看別人家(流式處理框架 flink) 是怎麼用 InfluxDB 的?並嘗試把 InfluxDB、Grafana 這些輪子組裝在一起,看看組裝之後的車子能否跑起來?


2

個人認為,做技術的不要一味追求紙上談兵,如果不會學以致用,都是在扯淡,所以學習任何一門技術,先會用才是硬道理。


接下來一起去看看 Flink 與 InfluxDB、Grafana 這些輪子組裝在一起,組裝之後的車子是否能夠跑順溜?


組裝輪子之前,先貼兩張圖,幫你回憶一下 InfluxDB 和 Grafana。


圖一:InfluxDB 入門寶典。


別人家的 InfluxDB 實戰 + 源碼剖析


圖二:Grafana 展示監控數據效果圖。


別人家的 InfluxDB 實戰 + 源碼剖析


InfluxDB 和 Grafana 如何安裝?如何使用?之前已經分享過,不在這裡贅述,下面著重介紹 Flink 與 InfluxDB、Grafana 輪子的集成。


磨刀霍霍。二話不說,直接打開一手的 flink 官方文檔,按照步驟做就是啦。

<code>https://ci.apache.org/projects/flink/flink-docs-release-1.8/monitoring/metrics.html/<code>


別人家的 InfluxDB 實戰 + 源碼剖析


圖中標註 1,進入 flink 的主目錄,然後拷貝 opt 目錄下的 flink-metrics-influxdb-1.8.0.jar 到 lib 目錄下。


圖中標註 2,進入 conf 目錄,打開 flink-conf.yaml 配置文件,加入圖中標註 2 的配置信息,注意修改成符合你所需的配置,配置解釋如下。


別人家的 InfluxDB 實戰 + 源碼剖析


到這兒,flink 與 InfluxDB 就算集成到一起了,看看組裝之後,能否順溜的跑起來。


啟動 flink,並讓 flink 做點計算任務,例如 WordCount。


連接上 InfluxDB,確認一下 flink 產生的 metrics 數據,是否寫入到 InfluxDB 中啦?


命令操作猛如虎。

<code>influx
use flink # 如果不存在,記得創建呦
show MEASUREMENTS
select * from jobmanager_Status_JVM_CPU_Load/<code>


實際效果讓人歡。

別人家的 InfluxDB 實戰 + 源碼剖析


見此景,足矣說明 flink 與 InfluxDB 集成的很完美,車子跑的很順溜。


另外,建議提前在 influxdb 中創建 flink 數據庫,不然會提示如下信息。

<code>WARN  org.apache.flink.runtime.metrics.MetricRegistryImpl           
- Error while reporting metricsorg.apache.flink.metrics.influxdb.shaded.org.influxdb.InfluxDBException$DatabaseNotFoundException: database not found: "flink"/<code>


趁熱乎勁,順道把 InfluxDB + Grafana 輪子的集成到一起,看看啥效果?


別人家的 InfluxDB 實戰 + 源碼剖析

別人家的 InfluxDB 實戰 + 源碼剖析


完成配置,點擊“Save & Test”按鈕進行保存和測試,成功會提示“Data source is working”。


然後,就可以在 Grafana 上看到 InfluxDB 中 flink 的所有表,進而 flink-metrics 監控數據,也就很順溜的呈現出來。而且你也可以根據個人需求,自定義 dashboard 或者去 Grafana 官網導入一些定義好模板。


別人家的 InfluxDB 實戰 + 源碼剖析


到這兒,Flink + InfluxDB + Grafana 輪子也就組裝完成了,而且組裝之後的車子,也跑的相當好。


此時,你是否會好奇車子背後是如何運作的呢?好奇害死貓,滿足你的好奇心。

3

別人家的 InfluxDB 實戰 + 源碼剖析


數據流向很簡單,Flink 定義了 InfluxdbReporter,用於定時把 flink-metrics 寫入到 InfluxDB 數據庫中,然後 Grafana 查詢 InfluxDB 進行數據計算並呈現。


別人家的 InfluxDB 實戰 + 源碼剖析


flink 中 InfluxReproter 源碼定義如上圖所示,標註 1 的代碼段,很顯然是獲取開篇提到的 flink-conf.yml 中配置配置信息,然後連接 InfluxDB 數據庫;標註 3 的代碼段,完成釋放資源,關閉 InfluxDB 數據庫連接;標註 2 的代碼段,主要是調用 buildReport() 方法封裝上報數據,並完成 flink-metrics 寫入 influxDB。


別人家的 InfluxDB 實戰 + 源碼剖析


上面截圖,metrics 幾個核心度量指標(gauges、counters、histograms、meters)再次呈現在我們面前,主要是調用 influxdb 提供的 API 進行指標數據封裝。


別人家的 InfluxDB 實戰 + 源碼剖析


為了從全局上看的更清楚一些,一張 InfluxdbReporter 繼承實現關係圖,貼給大家。希望大家結合《實踐指路明燈,源碼剖析flink-metrics》那篇文章去理解,會理解的更清晰。

4

學技術,先在會用的前提下,再逐漸進行深入剖析,最後做到靈活運用。


基於當下流行的流式處理框架 flink 的源碼剖析,相信會對你有所幫助,尤其是自研的場景下,很多代碼可以拿去複用,它山之石可以攻玉


好了,本次的分享就到這裡,每天進步一點點,前進不止一小點,希望你們有所獲。


分享到:


相關文章: