別人家的 InfluxDB 實戰 + 原始碼剖析

語言: CN / TW / HK

1

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

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

2

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

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

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

圖一: InfluxDB 入門寶典。

圖二: Grafana 展示監控資料效果圖。

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

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

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

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

圖中標註 2,進入 conf 目錄,開啟 flink-conf.yaml 配置檔案,加入圖中標註 2 的配置資訊,注意修改成符合你所需的配置,配置解釋如下。

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

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

連線上 InfluxDB,確認一下 flink 產生的 metrics 資料,是否寫入到 InfluxDB 中啦?

命令操作猛如虎。

influx

use flink # 如果不存在,記得建立呦

show MEASUREMENTS

select * from jobmanager_Status_JVM_CPU_Load

實際效果讓人歡。

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

另外,建議提前在 influxdb 中建立 flink 資料庫,不然會提示如下資訊。

WARN org.apache.flink.runtime.metrics.MetricRegistryImpl - Error while reporting metrics

org.apache.flink.metrics.influxdb.shaded.org.influxdb.InfluxDBException$DatabaseNotFoundException: database not found: "flink"

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

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

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

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

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

3

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

flink 中 InfluxReproter 原始碼定義如上圖所示,標註 1 的程式碼段,很顯然是獲取開篇提到的 flink-conf.yml 中配置配置資訊,然後連線 InfluxDB 資料庫; 標註 3 的程式碼段,完成釋放資源,關閉 InfluxDB 資料庫連線; 標註 2 的程式碼段,主要是呼叫 buildReport() 方法封裝上報資料,並完成 flink-metrics 寫入 influxDB。

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

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

4

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

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

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

推薦閱讀:

一分鐘 Get 時序資料庫 InfluxDB 的技能