Flink详解 Metrics 原理与实践

什么是 Metrics ?

Flink 提供的 Metrics 可以在 Flink 内部收集一些指标,通过这些指标让开发人员更好地理解作业或集群的状态。由于集群运行后很难发现内部的实际状况,跑得慢或快,是否异常等,开发人员无法实行查看所有的 Task 日志,比如作业很大或者有很多作业的情况下,该如何处理?此时 Metrics 可以很好的帮助开发人员了解作业的当前状况。

Metric Types

Metrics 的类型如下:

  1. 首先,常用的如 Counter,写过 mapreduce 作业的开发人员就应该很熟悉 Counter,其实含义都是一样的,就是对一个计数器进行累加,即对于多条数据一直往上加的过程。
  2. 第二,Gauge,Gauge 是最简单的 Metrics,它反映一个值。比如要看现在 Java heap 内存用了多少,就可以每次实时的暴露一个 Gauge,Gauge 当前的值就是 heap 使用的量。
  3. 第三,Meter,Meter 是指统计吞吐量和单位时间内发生“事件”的次数。它相当于求一种速率,即事件次数除以使用的时间。
  4. 第四,Histogram,Histogram 比较复杂,也并不常用,Histogram 用于统计一些数据的分布,比如说 Quantile、Mean、StdDev、Max、Min 等。

Metric Group

Metric 在 Flink 内部有多层结构,以 Group 的方式组织,它并不是一个扁平化的结构,Metric Group + Metric Name 是 Metrics 的唯一标识。

Metric Group 的层级有 TaskManagerMetricGroup 和 TaskManagerJobMetricGroup,每个 Job 具体到某一个 task 的 group,task 又分为 TaskIOMetricGroup 和 OperatorMetricGroup。Operator 下面也有 IO 统计和一些 Metrics,整个层级大概如下图所示。Metrics 不会影响系统,它处在不同的组中,并且 Flink 支持自己去加 Group,可以有自己的层级。


 - TaskManagerMetricGroup
 	- TaskManagerJobMetricGroup
 		- TaskMetricGroup 	
 			- TaskIOMetricGroup
 			- OperatorMetricGroup
 				- ${
   User-defined Group} / ${
   User-defined Metrics}
 				- OperatorIOMetricGroup
 - JobManagerMetricGroup
 	- JobManagerJobMetricGroup				

JobManagerMetricGroup 相对简单,相当于 Master,它的层级也相对较少。

Metrics 定义还是比较简单的,即指标的消息可以自己收集,自己统计,在外部系统能够看到 Metrics 的消息,并能够对其进行聚合计算。


如何使用 Metrics ?

System Metrics

System Metrics,将整个集群的状态已经涵盖得非常详细。具体包括以下方面:

  • Master 级别和 Work 级别的 JVM 参数,如 load 和 time;其 Memory 划分也很详细,包括 heap 的使用情况、non-heap 的使用情况,direct 的使用情况,以及 mapped 的使用情况;Threads 可以看到具体有多少线程;还有非常实用的 Garbage Collection。
  • Network 使用比较广泛,当需要解决一些性能问题的时候,Network 非常实用。Flink 不只是网络传输,还是一个有向无环图的结构,可以看到它的每个上下游都是一种简单的生产者消费者模型。Flink 通过网络相当于标准的生产者和消费者中间通过有限长度的队列模型。如果想要评估定位性能,中间队列会迅速缩小问题的范围,能够很快的找到问题瓶颈。
  • 运维集群的人会比较关心 Cluster 的相关消息,如果作业太大,则需要非常关注 Checkpointing,它有可能会在一些常规的指标上无法体现出潜在问题。比如 Checkpointing 长时间没有工作,数据流看起来没有延迟,此时可能会出现作业一切正常的假象。另外,如果进行了一轮 failover 重启之后,因为
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink是一个开源的流式处理框架,可以用于构建大规模、高可靠性的实时数据处理应用程序。它提供了丰富的API和工具,支持批处理和流处理,并且能够支持事件时间处理和状态管理。 Flink的主要原理是基于流式数据流动进行计算。它将数据流划分为多个事件,然后对每个事件进行处理和转换。在流处理的过程中,Flink能够提供事件时间处理功能,即根据事件发生的时间进行计算,而非数据到达的时间。这样可以解决数据乱序和延迟等问题,并实现更准确的计算结果。 Flink实践可分为三个步骤: 1. 数据准备:首先需要准备输入数据,可以是实时的数据流或者是批处理的数据。可以通过读取文件、连接数据库或者使用消息队列等方式获取数据。 2. 程序开发:根据需求和业务逻辑,使用Flink提供的API编写代码,对数据进行处理和转换。可以使用Flink的窗口操作、状态管理等功能来实现复杂的计算逻辑。 3. 集群部署:将开发好的程序部署到Flink的集群上进行运行。Flink提供了分布式计算能力,可以进行大规模的并行处理。在部署过程中,需要配置集群环境、资源分配、数据源连接等。 Flink的教学课件主要包括以下内容: 1. Flink简介:介绍Flink的概念、优势和适用场景。 2. Flink基础:讲解Flink的核心概念、架构和工作原理。 3. 数据处理:介绍Flink的数据处理模型和API,包括数据流、窗口操作、事件时间处理等。 4. 状态管理:讲解如何在Flink中管理状态和容错机制,以及如何处理乱序和延迟数据。 5. 集群部署与调优:介绍Flink的集群部署方式、资源管理、调度策略和性能优化等内容。 6. 实践案例:通过实例演示Flink在实际项目中的应用,包括流式推荐、实时统计和实时预测等。 总之,Flink原理实践全套教学课件将帮助学习者全面了解Flink原理和使用方法,并通过实例演示帮助学习者掌握Flink在实际项目中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值