【Flink系列二】构建实时计算平台——特别篇,用InfluxDb收集Flink Metrics
1.【Flink系列二十】Flink Example AsyncIOExample long running 应用程序的应用2.【Flink系列二十一】深入理解 JVM的类型加载约束,解决 Flink 类型加载冲突问题的通用方法3.【Flink系列十九】Flink 作业Hadoop 依赖冲突解决NoSuchMethodError4.HDFS_DELEGATION_TOKEN过期的问题解决汇总5.【Flink系列十八】History Server 重新登场,如何实现Yarn日志集成6.【Flink系列十七】Flink 最新yarn-application和yarn-per-job部署模式的Classpath传递分析7.【Flink系列十六】PrometheusPushGatewayReporter 限流压力过大解决8.【Flink系列十五】FLINK-24950 registerTemporaryFunction NullPointerException9.【Flink系列十四】Flink JVM参数不生效的问题分析和解决10.【Flink系列十三】Flink-Kafka-Connector KafkaSource FlinkKafkaConsumer没有上报指标11.【Flink系列十二】使用OpenResty 在InfluxDB协议层拦截Flink指标12.【Flink系列十一】FlinkSQL Gateway以及支持Kerberos多租户的实现思路13.【Flink系列十】Flink作业提交过程的调试和诊断14.【Flink系列九】Flink 作业提交遇到的问题记录以及原理15.【Flink系列八】构建实时计算平台——动态加载Catalog中的UDF16.【Flink系列零】构建实时计算平台——FlinkSQL 作业菜鸟笔记17.【Flink系列七】构建实时计算平台——校验FlinkSQL18.【Flink系列六】构建实时计算平台——Flink 1.10+通过Kerberos连接HiveCatalog19.【Flink系列五】构建实时计算平台——flink-connector-hive连接HiveMetastore遇到问题20.【Flink系列四】构建实时计算平台——Flink SQLClient启动失败的问题笔记21.【Flink系列三】构建实时计算平台——特别篇,Influxdb Java客户端访问指标数据
22.【Flink系列二】构建实时计算平台——特别篇,用InfluxDb收集Flink Metrics
23.【Flink系列一】构建实时计算平台——Flink开启和恢复CheckpointInfluxdb 快速入门
从Docker启动 Influxdb
docker pull influxdb:LATEST
docker run -d --name influxdb -p 8086:8086 \
-v /opt/work/influxdb:/var/lib/influxdb \
influxdb
进入Influxdb的Client
# docker exec -it influxdb influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
>create database flink # 创建Flink数据库
>use flink #为FLink创建RETENTION_POLICY(1)
>CREATE RETENTION POLICY one_hour ON flink DURATION 1h REPLICATION 1 #为FLink创建RETENTION_POLICY(2)
配置Flink
修改FLINK_CONF
metrics.reporter.influxdb.class: org.apache.flink.metrics.influxdb.InfluxdbReporter
metrics.reporter.influxdb.host: <IP>
metrics.reporter.influxdb.port: 8086
metrics.reporter.influxdb.db: flink
metrics.reporter.influxdb.username:
metrics.reporter.influxdb.password:
metrics.reporter.influxdb.retentionPolicy: one_hour
以该配置启动的Flink作业,Flink会自动将指标写入Influxdb
【可选】安装Chronograf可视化界面
docker pull chronograf:LATEST
docker run --name chronograf -d -p 8888:8888 -v /opt/work/chronograf:/var/lib/chronograf chronograf
执行SQL可以查到CheckpointExternalPath
SELECT * FROM "flink"."one_hour"."jobmanager_job_lastCheckpointExternalPath"
效果图
优化
监控指标,一般使用Prometheus来做,而根据我的需求和实践来看,Influxdb仅用来接收lastCheckpointExternalPath这个指标。
经过大约半年多的观察,Influxdb 1.8,100个作业的情况下, 内存占用峰值会超过20GB,这个时候容器会自动重启,客户端无法上报。
因此需要对influxdb进行优化。这里记录一种最简单的优化,那就是直接减少指标数量:
package org.apache.flink.metrics.influxdb;
abstract class AbstractReporter<MetricInfo> implements MetricReporter {
protected final Logger log = LoggerFactory.getLogger(getClass());
protected final Map<Gauge<?>, MetricInfo> gauges = new HashMap<>();
protected final Map<Counter, MetricInfo> counters = new HashMap<>();
protected final Map<Histogram, MetricInfo> histograms = new HashMap<>();
protected final Map<Meter, MetricInfo> meters = new HashMap<>();
protected final MetricInfoProvider<MetricInfo> metricInfoProvider;
protected AbstractReporter(MetricInfoProvider<MetricInfo> metricInfoProvider) {
this.metricInfoProvider = metricInfoProvider;
}
@Override
public void notifyOfAddedMetric(Metric metric, String metricName, MetricGroup group) {
if (!metricName.equals("lastCheckpointExternalPath")) {
return;
}
经过验证,Flink 使用此Reporter,仅上报这一个指标。
合集:
助力长期平稳运行大数据作业
标签:
FLINK
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!