• flink metric库的使用和自定义metric-reporter


    简单介绍

    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

  • 相关阅读:
    微信小程序购物商城系统开发系列-工具篇
    如何用js获取浏览器URL中查询字符串的参数
    Vue.js——vue-resource全攻略
    多个 ng-app 中 Controllers & Services 之间的通信
    前端分页功能的实现以及原理
    纯css实现轮播图
    最好的Angular2表格控件
    2017年要学习的三个CSS新特性
    Kafka数据安全性、运行原理、存储
    Hbase与hive集成与对比
  • 原文地址:https://www.cnblogs.com/0x12345678/p/10561039.html
Copyright © 2020-2023  润新知