别人家的 InfluxDB 实战 + 源码剖析
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 的源码剖析,相信会对你有所帮助,尤其是自研的场景下,很多代码可以拿去复用,它山之石可以攻玉。
好了,本次的分享就到这里,每天进步一点点,前进不止一小点,希望你们有所获。

别人家的 InfluxDB 实战 + 源码剖析的更多相关文章
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- Spring Boot 揭秘与实战 源码分析 - 工作原理剖析
文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...
- 实践指路明灯,源码剖析flink-metrics
1. 通过上期的分享,我们对 Metrics 类库有了较深入的认识,并对指标监控的几个度量类型了如指掌. 本期,我们将走进当下最火的流式处理框架 flink 的源码,一同深入并学习一下别人家的代码. ...
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...
- Redis源码剖析
Redis源码剖析和注释(一)---链表结构 Redis源码剖析和注释(二)--- 简单动态字符串 Redis源码剖析和注释(三)--- Redis 字典结构 Redis源码剖析和注释(四)--- 跳 ...
- Netty源码剖析-关闭服务
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 先在服务端加个断点和修改下代码:如 ...
- Netty源码剖析-断开连接
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 在NioEventLoop的unsa ...
- Netty源码剖析-发送数据
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! 开始之前先介绍下Netty写数据的三种方式: ①:write:写到一 ...
- Netty源码剖析-业务处理
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:worker thread 触发pipeline.fi ...
随机推荐
- Await/Async
Async其实就是Generator函数的语法糖. 啥是语法糖?就是一种更容易让人理解,代码可读性更高的另外一种语法. const asyncRead = async function(){ cons ...
- nginx前端服务部署
一.登录服务器 登录跳板机 执行list,列出所有机器 执行dssh 机器序号,如dssh 1,选择机器 二. 创建nginx配置文件 进入nginx配置目录:cd usr/local/nginx/c ...
- Flutter保持页面状态AutomaticKeepAliveClientMixin
使用bottomNavigationBar切换底部tab,再切换回来就会丢失之前的状态(重新渲染列表,丢失滚动条位置). 解决方法 使用 AutomaticKeepAliveClientMixin 重 ...
- R语言实战(一) R语言介绍
从2018年秋季(大二上学期)开始接触R语言,曾在2019年寒假读过一遍本书的第一版,感觉受益匪浅,之后遇到问题也曾回头来查阅这本书,前几天刚学习过Simulink,趁现在有空再来温习这本书,回顾一下 ...
- C#如何实现大小写转换
2020-03-16 每日一例第8天 1.新建窗体应用程序,拖入label/textbox/radiobutton控件,并改text值: 2.button控件输入代码: if (radioButt ...
- [CSP初赛] 组合数学的三个技巧以及从另一方面思考组合类问题
也不知道老师讲不讲 话说好久没有水博客了,看了一点\(python\)然后就去搞文化课了 正好网课讲到组合数学,然后觉得还蛮难的(其实是我变菜了),就想到了以前的\(csp\)的组合数学基础 果然被我 ...
- XSS(跨站脚本攻击)详解
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web ...
- HTTP请求中Get和Post请求的区别?
分类 Get的请求方式 1.直接在浏览器地址栏输入某个地址. 2.点击链接地址. 3.表单的默认提交方式或者设置为method="get". Post的请求方式 1.设置表单的me ...
- Vulnhub靶场 DC-2 WP
DC-2简介 描述 与DC-1一样,DC-2是另一个专门构建的易受攻击的实验室,目的是获得渗透测试领域的经验. 与原始DC-1一样,它在设计时就考虑了初学者. 必须具备Linux技能并熟悉Linux命 ...
- Android UI性能测试——使用 Systrace 查找问题
一 官方文档翻译 官文地址:https://developer.android.com/studio/command-line/systrace systrace命令允许您在系统级别上收集和检查所有运 ...