Flink全托管支持通过监控指标(Metrics)来帮您分析作业数据是否正常。本文为您介绍如何查看监控指标、Flink Source和Sink支持的指标含义,以及各Connector支持上报的Metrics信息情况。

背景信息

除了在Flink全托管控制台上查看监控指标的方式外,您也可以使用以下任意一种方式:
  • 使用自建的Prometheus服务监控Flink Metrics。
    但是您需要在网络连通的情况下,先在Flink全托管控制台目标作业开发页面右侧高级配置面板更多Flink配置中添加如下代码。
    metrics.reporters: promgatewayappmgr
    metrics.reporter.promgatewayappmgr.groupingKey: 'deploymentName={{deploymentName}};deploymentId={{deploymentId}};jobId={{jobId}}'
    metrics.reporter.promgatewayappmgr.jobName: '{{deploymentName}}'
    metrics.reporter.promgatewayappmgr.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
    metrics.reporter.promgatewayappmgr.host: 您的pushgateway host
    metrics.reporter.promgatewayappmgr.port: 您的pushgateway port
    说明
    • 以上代码中,pushgateway host和pushgateway port需要替换为您实际的值。deploymentName、deploymentId和jobId系统会自动进行替换。
    • Flink全托管和自建的Prometheus之间的网络连通要求如下:
      • 如果自建的Prometheus和Flink全托管是相同的VPC,则需要确认Prometheus安全组等配置允许Flink网段访问。
      • 如果自建的Prometheus和Flink全托管是不同的VPC,但自建的Prometheus有公网地址,则需要Flink配置公网访问,详情请参见Flink全托管集群如何访问公网?
      • 如果自建的Prometheus和Flink全托管是不同的VPC,但自建的Prometheus只有VPC的地址,则需要打通两个VPC,详情请参见如何访问跨VPC的其他服务?
  • 通过ARMS API的方式获取Flink全托管的Metrics后,将Metrics集成在您自己的平台上。

    ARMS API详情请参见API概览;Operator相关的Metric详情,请参见Operator Metrics

注意事项

  • Source端的指标表现并不是判断问题根源的充分条件,只反映了Source当前的工作状况,您仍然需要其他辅助指标或工具来判断问题的根源。常见问题的指标表现如下。
    场景 详情
    作业中某些算子存在反压 判断反压最直接的方式是使用Flink UI提供的反压检查功能,而不是通过指标判断。反压的存在会导致Source端数据发送至下游算子的速率下降,您可能会观察到sourceIdleTime周期性上升,currentFetchEventTime和currentEmitEventTimeLag不断增长。极限情况下(某些算子卡死)sourceIdleTime会持续上升。
    Source是性能瓶颈点 如果仅是Source的吞吐量不足,那么您的作业中不应该检测到反压,sourceIdleTime会维持在较低的值(Source一直在工作),currentFetchEventTimeLag和currentEmitEventTimeLag接近,但是两个指标均较高。
    上游数据倾斜或某个分区为空 数据倾斜或空分区会导致某一个或者几个Source并行度处于闲置状态,您会观察到这些Source的sourceIdleTime指标较大。
  • 如果您发现作业的延迟较高,则可以使用以下指标帮您分析Flink当前的处理能力,以及数据在外部系统中的滞留情况。
    指标 详情
    sourceIdleTime 该指标反映Source是否有闲置,如果该指标较大,说明您的数据在外部系统中的产生速率较低。
    currentFetchEventTimeLag和currentEmitEventTimeLag 均反映了Flink当前处理的延迟,您可以通过两个指标的差值(即数据在 Source中停留的时间)分析Source当前的处理能力。
    • 如果两个延迟非常接近,说明Source从外部系统中拉取数据的能力(网络 I/O、并发数)不足。
    • 如果两个延迟差值较大,说明Source的数据处理能力(数据解析、并发、反压)不足。
    pendingRecords 如果您使用的Connector汇报了pendingRecords指标,那么您可以通过该指标分析数据在外部系统的滞留数据量。

操作步骤

  1. 登录实时计算控制台
  2. Flink全托管页签,单击目标工作空间操作列下的控制台
  3. 在左侧导航栏上,选择应用 > 作业运维
  4. 单击目标作业名称。
  5. 单击数据曲线
    数据曲线
  6. 查看具体的数据曲线信息。
    Source和Sink支持的指标和各Connector是否支持上报Metrics信息详情,请参见指标说明

指标说明

  • Overview
    指标 含义 详情 单位 支持的Connector 版本限制
    Num of Restarts 作业错误恢复次数。 作业出错重启次数,不包含JM Failover次数。查看作业可用性,协助您查看作业状态。 次数 不涉及 实时计算引擎VVR 2.0.0及以上版本。
    currentEmitEventTimeLag 业务延时。 该延时较大时,说明作业可能在拉取数据或者处理数据上存在延时。 毫秒(ms)
    • Kafka
    • MQ
    • SLS
    • DataHub
    • Postgres CDC
    • Hologres(Binlog Source)
    实时计算引擎VVR 2.1.2及以上版本。
    currentFetchEventTimeLag 传输延时。 该延时较大时,说明作业可能在拉取数据上存在延时。您需要查看网络I/O或上游系统情况。结合currentEmitEventTimeLag,您可以通过两个指标的差值(即数据在Source中停留的时间)分析Source当前的处理能力。详情如下:
    • 如果两个延迟非常接近,说明Source从外部系统中拉取数据的能力(网络 I/O、并发数)不足。
    • 如果两个延迟差值较大,说明Source的数据处理能力(数据解析、并发、反压)不足。
    毫秒(ms)
    • Kafka
    • MQ
    • SLS
    • DataHub
    • Postgres CDC
    • Hologres(Binlog Source)
    numRecordsIn 所有Operator的输入的记录总数。 如果某个算子的numRecordsIn值长时间未增涨,可能存在上游把数据都吞掉的情况,需要查看上游数据。 所有内置Connector均支持。
    numRecordsOut 输出记录总数。 如果某个算子的numRecordsOut的值长时间未增涨,说明可能是作业代码逻辑错误,导致数据都被吞掉了,需要查看作业代码逻辑。 所有内置Connector均支持。
    numRecordsInofSource 每个Operator中仅source operator的输入记录。 查看上游数据输入情况。
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • MQ
    • SLS
    • DataHub
    • ElasticSearch
    • Hologres
    numRecordsOutOfSink Sink端输出记录总数。 查看上游数据输出情况。
    • Kafka
    • SLS
    • DataHub
    • Hologres
    • 云数据库HBase
    • Tablestore
    • Redis
    numRecordsInPerSecond 每秒输入记录数。 如果某个算子的numRecordsInPerSecond的值为0,说明可能存在上游把数据都吞掉的情况,需要查看上游数据是否一直未被消费,导致输出阻塞。 条/秒 所有内置Connector均支持。
    numRecordsOutPerSecond 每秒输出记录数。 如果某个算子的numRecordsOutPerSecond为0,说明可能是作业代码逻辑错误,过滤了全部数据,需要查看作业的代码逻辑。 条/秒 所有Connector均支持。
    numRecordsInOfSourcePerSecond (IN RPS) Source端每秒输入记录数。 该数据用于监控告警。如果该值为0,说明可能上游把数据都吞掉了,需要查看上游数据。 条/秒
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • MQ
    • SLS
    • DataHub
    • ElasticSearch
    • Hologres
    numRecordsOutOfSinkPerSecond (OUT RPS) Sink端每秒输出记录数。 该数据用于监控告警。如果该值为0,说明可能是作业代码逻辑错误,导致全部数据被过滤了,需要查看作业代码逻辑。 条/秒
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • SLS
    • DataHub
    • Hologres
    • 云数据库HBase
    • Tablestore
    • Redis
    pendingRecords 源端未读取数据的条数。 外部系统中尚未被Source拉取的数据条数。
    • Kafka
    • ElasticSearch
    sourceIdleTime 源端未处理数据的时间。 该指标反映Source是否有闲置。如果该指标的值较大时,说明您的数据在外部系统中的产生速率较低。 毫秒(ms)
    • Kafka
    • MQ
    • Postgres CDC
    • Hologres(Binlog Source)
  • Checkpoint
    说明 仅实时计算引擎VVR 2.0.0及以上版本支持以下指标。
    指标 含义 详情 单位
    Num of Checkpoints Checkpoint数量。 总览Checkpoint状态,协助您设置Checkpoint告警。
    lastCheckpointDuration 最近一个Checkpoint的持续时间。 如果Checkpoint耗时过长或者超时,可能由于状态过大、临时网络原因、Barrier未对齐或者数据存在反压等原因造成。 毫秒(ms)
    lastCheckpointSize 最近一个Checkpoint的大小。 最近一次实际上传的Checkpoint大小,可以在Checkpoint有瓶颈时协助分析Checkpoint性能。 Bytes
    lastCheckpointFullSize
    说明 仅实时计算引擎VVR 6.0及以上版本支持该指标。
    最近一个Checkpoint的全量大小。 使用该参数来看到当前Checkpoint在远端存储的实际空间大小。 Bytes
  • State
    说明 latency状态指标需要设置后才可以使用,因此您需要在更多Flink配置中设置state.backend.latency-track.keyed-state-enabled: true,启用latency状态指标后,可能会对作业运行时的性能造成一定影响。
    指标 含义 详情 单位 版本限制
    State Clear Latency 单次状态清理延迟最大值。 查看State清理的性能。 纳秒(ns) 实时计算引擎VVR 4.0.0及以上版本。
    Value State Latency 单次Value State访问延迟的最大值。 查看Value State访问的性能。 纳秒(ns)
    Aggregating State Latency 单次Aggregating State访问延迟的最大值。 查看Aggregating State访问的性能。 纳秒(ns)
    Reducing State Latency 单次Reducing State访问延迟的最大值。 查看Reducing State访问的性能。 纳秒(ns)
    Map State Latency 单次Map State访问延迟的最大值。 查看Map State访问的性能。 纳秒(ns)
    List State Latency 单次List State访问延迟的最大值。 查看List State访问的性能。 纳秒(ns)
    Sorted Map State Latency 单次Sorted Map State访问延迟的最大值。 查看Sorted Map State访问的性能。 纳秒(ns)
    State Size 状态数据的大小。 通过观测该指标,您可以:
    • 直接或提前定位可能出现的State瓶颈的节点。
    • 判断TTL是否生效。
    Bytes 实时计算引擎VVR 4.0.12及以上版本。
    State File Size 状态数据文件的大小。 通过观测该指标,您可以:
    • 查看本地磁盘中State部分占用的大小,在占用大时提前采取措施。
    • 遇到本地磁盘空间不足的情况时,判断是否因状态数据过大导致。
    Bytes 实时计算引擎VVR 4.0.13及以上版本。
  • IO
    说明 仅实时计算引擎VVR 2.1.2及以上版本支持以下指标。
    指标 含义 详情 单位 支持的Connector
    numBytesIn 输入字节总数。 查看上游吞吐的输入情况,协助您观察作业流量表现。 Bytes
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • MQ
    numBytesInPerSecond 每秒输入字节总数。 查看上游流速的输入情况,协助您观察作业流量表现。 Bytes/秒
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • MQ
    numBytesOut 输出字节总数。 查看上游吞吐的输出情况,协助您观察作业流量表现。 Bytes
    • Kafka
    • MQ
    • DataHub
    • 云数据库HBase
    numBytesOutPerSecond 每秒输出字节总数。 查看上游吞吐输出情况,协助您观察作业流量表现。 Bytes/秒
    • Kafka
    • MQ
    • DataHub
    • 云数据库HBase
    Task numRecords I/O 每个Subtask收到和输出的总数据量。 根据该指标判断作业是否存在I/O瓶颈。
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • SLS
    • DataHub
    • ElasticSearch
    • Hologres
    • 云数据库HBase
    • Tablestore
    • Redis
    Task numRecords I/O PerSecon 每个Subtask每秒收到和输出的总数据量。 判断作业是否存在I/O瓶颈并且通过速率判断严重程度。 条/秒
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • SLS
    • DataHub
    • ElasticSearch
    • Hologres
    • 云数据库HBase
    • Tablestore
    • Redis
    currentSendTime 输出到下游系统的每个Subtask发送最近一条数据的用时。 该指标值较小时,说明Subtask输出过慢。 毫秒(ms)
    • Kafka
    • MaxCompute
    • 增量MaxCompute
    • MQ
    • SLS
    • DataHub
    • Hologres
      说明 JDBC模式和RPC模式支持,BHClient模式不支持。
    • 云数据库HBase
    • Tablestore
    • Redis
  • Watermark
    指标 含义 详情 单位 支持的Connector 版本限制
    Task InputWatermark 每个Task收到最近一条水印的时间。 说明TM收到数据的延时情况。 不涉及Connector 实时计算引擎VVR 2.0.0及以上版本。
    watermarkLag Watermark延迟。 判断Subtask级别的作业延迟情况。 毫秒(ms)
    • Kafka
    • MQ
    • SLS
    • DataHub
    • Hologres(Binlog Source)
    实时计算引擎VVR 2.1.2及以上版本。
  • JM资源
    说明 仅实时计算引擎VVR 2.0.0及以上版本支持以下指标。
    指标 含义 详情 单位
    JM CPU Load 单个JM CPU的负载。 如果该值长期大于100%,说明CPU很繁忙,负载很高。这可能会影响系统性能,导致系统卡顿、响应时间过长等问题。
    JM Heap Memory JM的堆内存。 查看JM堆内存的变化。 Bytes
    JM nonHeap Memory JM的非堆内存。 查看JM非堆内存的变化。 Bytes
    JM Threads JM线程数。 JM线程数过多会导致占用过大的内存空间,从而降低作业稳定性。
    JM GC Count JM GC次数。 GC次数过多会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业级别的故障原因。 Times
    JM GC Time 每次JM GC时间。 长时间GC会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业级别的故障原因。 毫秒(ms)
    JM ClassLoader/ClassUnLoader JM所在的JVM在创建后,加载或卸载的类总数。 JM所在的JVM创建后,加载类的总数或卸载类的总数过大,会导致占用过大的内存空间,从而影响作业性能。
  • TM资源
    说明 仅实时计算引擎VVR 2.0.0及以上版本支持以下指标。
    指标 含义 详情 单位
    TM CPU Load 单个TM CPU的负载。 指一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息。通常可以理解为CPU的繁忙程度,和CPU核数相关,Flink里面的CPU Load是CPU Usage/CPU核数。大于这个值,说明CPU处理可能有堵塞。
    TM CPU Usage 单个TM CPU的CPU使用率。 该值反映Flink对CPU时间片的占用情况,1个Core的CPU用满了就是100%,4个Core用满了就是400%。如果该值长期大于100%则说明CPU很繁忙。如果负载很高,但CPU使用率却比较低,可能因为频繁的读写操作导致不可中断睡眠状态的进程过多。
    TM Heap Memory TM的堆内存。 查看TM堆内存的变化。 Bytes
    TM nonHeap Memory TM的非堆内存。 查看TM非堆内存的变化。 Bytes
    TM Mem (RSS) 通过Linux获取整个进程的内存。 查看进程内存的变化。 Bytes
    TM Threads TM线程数。 TM线程数过多会导致占用过多内存,从而降低作业稳定性。
    TM GC Count TM GC次数。 GC次数过多会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业Task级别的故障原因。 次数
    TM GC Time 每次TM GC时间。 长时间GC会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业级别的故障原因。 毫秒(ms)
    TM ClassLoader/ClassUnLoader TM所在的JVM创建后,加载或卸载的类总数。 JM所在的JVM创建后加载类的总数或卸载类的总数过大,会导致占用过大内存空间,从而影响作业性能。