Flink 指标(二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 指标(二)相关的知识,希望对你有一定的参考价值。

参考技术A 通过 conf/flink-conf.yaml 文件配置一个或多个 Reporters 来暴露度量值给外部系统,这些 Reporter 将在作业和任务启动的时候实例化。

所有的 Reporter 配置至少需要配置 class 属性,还有一些允许配置记录间隔。下面是一些 Reporter 的配置实例:

包含 Reporter 的 jar 必须放到 /lib 文件夹,这样 Flink 就可以访问到这些 jar。
可以通过继承 org.apache.flink.metrics.reporter.MetricReporter 接口来实现自己的 Reporter,如果需要定期发送记录,需要继承 Scheduled 接口。

下面是一些支持的 Reporter:

不需要添加额外的依赖就可以支持 JMX Reporter,默认是不激活的。

参数:

配置示例:

通过 JMX 公开的度量由域(domain)和键属性列表(key-properties)标识,这些属性一起构成对象名。

域始终以 org.apache.flink 开头,后跟一个通用的度量标识符。与通常的标识符不同,它不受作用域格式的影响,不包含任何变量,并且在跨作业时也是常量。例子: org.apache.flink.job.task.numbytesout 。

键属性列表包含与给定指标关联的所有变量的值,无论配置的作用域格式如何。例子: host=localhost,job_name=myjob,task_name=mytask 。

因此,域标识一个度量类,键属性列表标识该度量的一个(或多个)实例。

要使用此 Reporter,必须复制 /opt/flink-metrics-ganglia-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

参数:

配置示例:

要使用此 Reporter,必须复制 /opt/flink-metrics-graphite-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

参数:

配置示例:

要使用此 Reporter,必须复制 /opt/flink-metrics-prometheus-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

参数:

配置示例:

Flink 度量类型映射到 Prometheus 度量类型,如下所示:

要使用此 Reporter,必须复制 /opt/flink-metrics-prometheus-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

参数:

配置示例:

PrometheusPushGatewayReporter 将指标推送到 Pushgateway,可由 Prometheus 抓取。

要使用此 Reporter,必须复制 /opt/flink-metrics-statsd-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。
参数:

配置示例:

要使用此 Reporter,必须复制 /opt/flink-metrics-datadog-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。
Flink 指标,如任何变量 <host> , <job_name> , <tm_id> , <subtask_index> , <task_name> 和 <operator_name> ,将被发送到 Datadog 作为标签。标签看起来像 host:localhost 和 job_name:myjobname 。

参数:

配置示例:

要使用此 Reporter,必须复制 /opt/flink-metrics-slf4j-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

配置示例:

Flink 默认会收集当前状态的指标,下文的表格中包括以下5列:

请注意,“infix” 和 “Metrics” 列中所有的点根据 “metrics.delimiter” 设置变化。

因此,为了推断指标的标识符:

Reference:
https://ci.apache.org/projects/flink/flink-docs-release-1.6/monitoring/metrics.html

Flink Dashboard:算子吞吐量

【中文标题】Flink Dashboard:算子吞吐量【英文标题】:Flink Dashboard: Operator Throughput 【发布时间】:2020-12-28 17:12:55 【问题描述】:

    我有一个使用 flink (1.9) 的程序,我想在仪表板的帮助下检查 Map 运算符实例的吞吐量。从已经存在的指标来看,numRecordsInPerSecond 似乎是最有希望的,但我想它不涉及处理时间。我错了吗?

    我已经定义了自己的指标(吞吐量),它基本上通过将处理的记录数除以 OUT 映射(IN 值)函数的总执行时间来计算平均吞吐量。但这不包括在 map 函数之外发生的任何事情。

    另一个想法是在 map 函数的末尾添加一个计量器,但我想如果源不能足够快地生成记录,那么计算的吞吐量会更糟,因为操作员很多时候都处于空闲状态。这是正确的吗?

请具体回答 1 和 2。另外,您通常如何计算程序中的吞吐量?

【问题讨论】:

【参考方案1】:

Flink 的所有 Meter 指标,例如 numRecordsInPerSecond,都是根据处理时间来衡量速率。

我通常满足于依靠这些内置指标来衡量吞吐量。但是你可能想在接收器中添加一个自定义指标,因为 Flink 总是返回 0 表示 numRecordsOut 和 numRecordsOutPerSecond 表示接收器。

【讨论】:

以上是关于Flink 指标(二)的主要内容,如果未能解决你的问题,请参考以下文章

Apache Flink 在 UI 中显示自定义指标,但普罗米修斯指标报告器没有抓取它们

延迟指标在 Flink 中代表啥?它们真的可以用来评估应用程序的延迟吗?

指标统计:基于流计算 Oceanus(Flink) 实现实时 UVPV 统计

Flink中如何实现一个自定义MetricReporter

FlinkFlink 指标监测 相关源码

从 0 到 1 搭建一套 Flink 的监控系统