简单介绍

flink内部实现了一套metric数据收集库。 同时flink自身系统有一些固定的metric数据, 包括系统的一些指标,CPU,内存, IO 或者各个task运行的一些指标。具体包含那些指标可以查看官方文档: flink-metric

同时我们也可以利用系统的metric库在自己的代码中进行打点收集metrics数据。此外, flink提供了外部接口,可以用来导出这些metrics数据.

flink-metric库的使用

在官方的文档中有介绍, 需要继承Richfunction 才能获得对应的metric对象, 用法如下:

public class MyMapper extends RichMapFunction<String, String> {
private transient Counter counter; @Override
public void open(Configuration config) {
this.counter = getRuntimeContext()
.getMetricGroup()
.counter("myCounter");
} @Override
public String map(String value) throws Exception {
this.counter.inc();
return value;
}
}

flink-metrics导出到外部系统

在flink中, 提供了方便的metric数据导出的库,通过实现自己的reporter,可以将metrics数据导出到不同的系统.

官方提供有多种reporter库,JMX, Graphite, Slf4j... 等等. 同时,我们可以自定义实现metric库,来导入到自己的系统.

自定义reporter类

实现MetricReporter类中的open,close, notifyOfAddedMetric, notifyOfRemovedMetric方法

实现Scheduled的report方法 ,在刚方法中实现写入到其他系统的逻辑

实现CharacterFilter的 filterCharacters方法, 用于对scope进行过滤.

public class FalconReporter implements MetricReporter, CharacterFilter, Scheduled {

  private static final Logger LOG =LoggerFactory.getLogger(FalconReporter.class);

  private final Map<Gauge<?>, MetricTag> gauges = new ConcurrentHashMap<>();
private final Map<Counter, MetricTag> counters = new ConcurrentHashMap<>();
private final Map<Histogram, MetricTag> histograms = new ConcurrentHashMap<>();
private final Map<Meter, MetricTag> meters = new ConcurrentHashMap<>(); @Override
public String filterCharacters(String s) {
return s;
} @Override
public void open(MetricConfig metricConfig) {
} @Override
public void close() {
} @Override
public void notifyOfAddedMetric(Metric metric, String s, MetricGroup metricGroup) { } @Override
public void notifyOfRemovedMetric(Metric metric, String s, MetricGroup metricGroup) {
} @Override
public void report() { }
}

配置reporter

在flink-conf.yaml中配置即可,配置如下

metrics.reporters: slf4j, jmx
metrics.reporter.slf4j.class: org.apache.flink.metrics.falcon.FalconReporter
metrics.reporter.slf4j.interval: 60 SECONDS

metrics.reporters 用于配置类型名, 自定义即可

metrics.reporter.slf4j.class: 配置对应类型的reporter类

metrics.reporter.slf4j.interval: 60 SECONDS  消息上报的间隔

metrics.reporter.slf4j.* 可以自定义配置, 可以在open(MetricConfig metricConfig) 中的获得对应的config

flink metric库的使用和自定义metric-reporter的更多相关文章

  1. Flink的sink实战之四:自定义

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. xgboost中如何自定义metric(python中)

    正好在参加携程的比赛,用的xgboost的算法,但携程比赛的测评函数比较奇怪,不是传统的那些,而是取precision≥0.97的情况下,recall的最大值.那无疑这个测评函数是要自己写的(官方没给 ...

  3. JSP标准标签库的安装以及自定义标签的创建

    JSTL 库安装 Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip). 官方下载 ...

  4. python找寻合适的日志库logging Handler——Handler自定义实现

    最近在用python tornado开发一个app的服务端.投产的系统肯定需要包含日志功能,这里就自然想到了用python自带的logging库.   logging中日志内容的输出都交由Handle ...

  5. [WPF自定义控件库]为Form和自定义Window添加FunctionBar

    1. 前言 我常常看到同一个应用程序中的表单的按钮----也就是"确定"."取消"那两个按钮----实现得千奇百怪,其实只要使用统一的Style起码就可以统一按 ...

  6. 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)

    解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...

  7. flink-----实时项目---day07-----1.Flink的checkpoint原理分析 2. 自定义两阶段提交sink(MySQL) 3 将数据写入Hbase(使用幂等性结合at least Once实现精确一次性语义) 4 ProtoBuf

    1.Flink中exactly once实现原理分析 生产者从kafka拉取数据以及消费者往kafka写数据都需要保证exactly once.目前flink中支持exactly once的sourc ...

  8. Volley HTTP库系列教程(5)自定义一个Volley请求

    Implementing a Custom Request Previous  Next This lesson teaches you to Write a Custom Request parse ...

  9. 【C++】标准库sort函数的自定义排序

    自定义排序需要单独写一个compare函数 例1 LeetCode 056. Merge Intervals Given a collection of intervals, merge all ov ...

随机推荐

  1. Win7共享文件夹简单?这个共享问题可以难倒90%的人

    信息化社会,没有哪个公司不用电脑办公了.一个办公室里面的同事相互之间利用系统的共享功能,共享一些文件和软件已经是司空见惯的了,这个不需要多么复杂的操作.我们使用最多的windows7操作系统就能很方便 ...

  2. About Why Inline Member Function Should Defined in The Header File

    About why inline member function should defined in the header file. It is legal to specify inline on ...

  3. java.util.ConcurrentModificationException 记一次坑

    集合在单线程,一个循环内,有添加又删除会出现此异常. 多线程时,在不同的循环操作同一个集合,会出现此异常. 因为,集合长度发生改变时,在迭代器未结束前,迭代器的大小不会发生变化. 1.保证在同一个进程 ...

  4. 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率

     22.1   概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ...

  5. jdk1.7更新visualvm插件

    所有的插件全部更新到hithub上 https://visualvm.github.io/pluginscenters.html 然后,在根据不同的JDK版本选择不同的插件地址.更改VisualVM插 ...

  6. B站资源索引

    自从搭建了B站的监控之后,就收集了一堆up主,下面分类整理一下,排名不分先后,内容会持续更新……2019-4-10 19:04:08 一.酷玩&装机&开箱 1.AS极客 2.Virtu ...

  7. 1.3 正则表达式和python语言-1.3.8 创建字符集([ ])

    1.3.8 创建字符集([ ]) (2018-05-0815:24:00) 下面的示例将说明对于 r2d2|c3po 的限制将比[cr][23][dp][o2]更为严格 import re # 下面的 ...

  8. 图解CSS3核心技术与案例实战(1)

    前言: 我买了一本<图解CSS3核心技术与案例实战>大漠写的,为了提高自己的自觉性呢,抓紧看书,把读书笔记放在这上面,跟大家一起分享,也为督促自己完成读书计划. 文末有微信公众号,感谢你的 ...

  9. [CF1138B]Circus

    Description: 给你2个长度为n的01串 从中选出\(n/2\)个,使得选出的数中第一排1的个数等于未选出数中第二排1的个数 输出一种方案即可,没有输出-1 Hint: \(n \le 50 ...

  10. Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句

    最近把平时在项目中常用到的数据库分页sql总结了下.大家可以贴出分页更高效的sql语句.sqlserver分页  第一种分页方法 需用到的参数:  pageSize 每页显示多少条数据  pageNu ...