开发者学堂课程【Apache Flink 入门到实战 - Flink 开源社区出品 :Metrics 和监控(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/632/detail/10046
Metrics 和监控(一)
内容介绍:
一、什么是 Metrics
二、Metrics 的类型
三、Metric Group
四、怎么用 Metrics
五、如何获取 Metrics
六、实战:利用 Metrics 监控(几个哲学问题)
七、实战
一、什么是 Metrics
相当于指标等一类的意思;fink 提供的 Metrics,可以在 fink 内部收集这样的指标,然后暴露出指标,去更好的理解作业的状态、集群的状态。
这样更好的理解内部的状态。(不能实时检测作业的过程)Metrics 就相当于可以实时监控作业的工具。
二、Metrics 的类型
1、counter 计数器;
可以进行累加或者累减
2、Gauge 最简单的Metrics,反映一个值
看现在内存有多少可以每次实时暴露Gauge,Gauge目前的值就是kept使用的量。
3、meter 统计吞吐量,单位时间内发生“事件”的次数。
相当于求一种速率,事件处理它所用的时间得出的类似于斜率的东西。
4、histogram 统计数据分布、quantile(分位数),mean(频率值),stddev(标准方差),max,min(给一段时间,一段时间内做一个详细的统计)
三、Metric Group
1、Metric 在 Flink 内部有多层结构,并不是扁平化结构,是具有层级关系的,以 Group的方式组织
2、Metric Group + Metric Name 的唯一标识。下面是一个具体的例子(层级关系):
TaskManagerMetricGroup
TaskManagerJobMetricGroup
TaskMetricGroup
TasklOMetricGroup
OperatorMetricGroup
$User-defined Group}/ $fUser-defined Metrics}
(自己加的 Metric,可以有自己的分层)
OperatorlOMetricGroup
JobManagerMetricGroup
(层级少)
JobManagerJobMetricGroup
四、怎么用 Metrics
第一步 what,第二步 how
1、系统内置的 Metrics
(1)CPU
(2)memory(heap 的使用情况、nonheap 的使用情况、direct 使用情况)
(3)threads
(4)garbage collection
(5)class loader(不常用)
(6)network(广泛)解决性能问题 network 很好用。不只是网络传输。可以简单想象为Flink结构,一个有向无环图,可以看到上下游是一种生产者消费者模型。定位性能后面会讲到。
(7)cluster(集群)
(8)availability
(9)checkpointing(可以体现潜在的问题)
(10)rockDB(作业规模数据量足够大,需要额外关注,随着数据量的增大,性能会下降。但不会明显下降)
(11)IO
(12)connnectors
(13)kinesis connector
2、User-defined Metrics
除了系统的 Metrics 之外,Flink 支持自定义 Metrics
继承 RichFunction(才可以有接口)
Register user-defined Metric Group:
(自定义层级)
getRuntimeContext().getMetricGroup().addGroup(...)
入口
Register user-defined Metric:
getRuntimeContext).getMetricGroup@).counter/gauge/meter/histogram(...)
例:
Counter processedCount=
getRuntimeContext().getMetricGroup().counter("processed_count"):
processedCount.inc();
Meter processRate = getRuntimeContext().getMetricGroup().meter("rate", new MeterView(60));
processRate.markEvent();
(meter 多长时间内发生的记录,要有一个时间的窗口,单位为秒;加一个事件不需要每次 counter)getRuntimeContext().getMetricGroup().gauge("current_timestamp",System::currentTimeMillis);
Histogram histogram = getRuntimeContext().getMetricGroup().histogram("histogram", new
DescriptiveStatisticsHistogram(1000));
histogram.update(1024);
(继承关系,)
https://ci.apache.org/projects/flink/flink-docs-release-1.8/monitoring/metrics.html#metric-types