本文为您介绍Flink全托管支持的监控指标详情。
注意事项
Source端的指标表现并不是判断问题根源的充分条件,只反映了Source当前的工作状况,您仍然需要其他辅助指标或工具来判断问题的根源。常见问题的指标表现如下。
场景
详情
作业中某些算子存在反压
判断反压最直接的方式是使用Flink UI提供的反压检查功能,而不是通过指标判断。反压的存在会导致Source端数据发送至下游算子的速率下降,您可能会观察到sourceIdleTime周期性上升,currentFetchEventTimeLag和currentEmitEventTimeLag不断增长。极限情况下(某些算子卡死)sourceIdleTime会持续上升。
Source是性能瓶颈点
如果仅是Source的吞吐量不足,那么您的作业中不应该检测到反压,sourceIdleTime会维持在较低的值(Source一直在工作),currentFetchEventTimeLag和currentEmitEventTimeLag接近,但是两个指标均较高。
上游数据倾斜或某个分区为空
数据倾斜或空分区会导致某一个或者几个Source并行度处于闲置状态,您会观察到这些Source的sourceIdleTime指标较大。
如果您发现作业的延迟较高,则可以使用以下指标帮您分析Flink当前的处理能力,以及数据在外部系统中的滞留情况。
指标
详情
sourceIdleTime
该指标反映Source是否有闲置,如果该指标较大,说明您的数据在外部系统中的产生速率较低。
currentFetchEventTimeLag和currentEmitEventTimeLag
均反映了Flink当前处理的延迟,您可以通过两个指标的差值(即数据在 Source中停留的时间)分析Source当前的处理能力。
如果两个延迟非常接近,说明Source从外部系统中拉取数据的能力(网络 I/O、并发数)不足。
如果两个延迟差值较大,说明Source的数据处理能力(数据解析、并发、反压)不足。
pendingRecords
如果您使用的连接器汇报了pendingRecords指标,那么您可以通过该指标分析数据在外部系统的滞留数据量。
Overview
指标 | 含义 | 详情 | 单位 | 支持的连接器 |
Num of Restarts | 作业错误恢复次数。 | 作业出错重启次数,不包含JM Failover次数。查看作业可用性,协助您查看作业状态。 | 次数 | 不涉及 |
currentEmitEventTimeLag | 业务延时。 | 该延时较大时,说明作业可能在拉取数据或者处理数据上存在延时。 | 毫秒(ms) |
|
currentFetchEventTimeLag | 传输延时。 | 该延时较大时,说明作业可能在拉取数据上存在延时。您需要查看网络I/O或上游系统情况。结合currentEmitEventTimeLag,您可以通过两个指标的差值(即数据在Source中停留的时间)分析Source当前的处理能力。详情如下:
| 毫秒(ms) |
|
numRecordsIn | 所有Operator的输入的记录总数。 | 如果某个算子的numRecordsIn值长时间未增涨,可能存在上游把数据都吞掉的情况,需要查看上游数据。 | 条 | 所有内置连接器均支持。 |
numRecordsOut | 输出记录总数。 | 如果某个算子的numRecordsOut的值长时间未增涨,说明可能是作业代码逻辑错误,导致数据都被吞掉了,需要查看作业代码逻辑。 | 条 | 所有内置连接器均支持。 |
numRecordsInofSource | 每个Operator中仅source operator的输入记录。 | 查看上游数据输入情况。 | 条 |
|
numRecordsOutOfSink | Sink端输出记录总数。 | 查看上游数据输出情况。 | 条 |
|
numRecordsInPerSecond | 整个数据流每秒钟输入的记录数。 | 用于需要监控整个数据流的处理速度的场景。例如,您可以使用numRecordsInPerSecond来观察整个数据流的处理速度是否达到了预期的水平,以及在不同的输入数据负载下性能的变化情况。 | 条/秒 | 所有内置连接器均支持。 |
numRecordsOutPerSecond | 整个数据流每秒钟输出的记录数。 | 用于测量整个数据流每秒钟输出的记录数,适用于需要监控整个数据流的输出速度的场景。 例如,您可以使用numRecordsOutPerSecond来观察整个数据流的输出速度是否达到了预期的水平,以及在不同的输出数据负载下性能的变化情况。 | 条/秒 | 所有连接器均支持。 |
numRecordsInOfSourcePerSecond (IN RPS) | 数据源Source端每秒输入记录数。 | 用于测量每个数据源每秒钟生成的记录数,适用于需要了解每个数据源的生成速度的场景。例如,在一个数据流中,不同的数据源可能会产生不同数量的记录,使用numRecordsInOfSourcePerSecond可以帮助您了解每个数据源的生成速度,并对数据流进行调整以达到更好的性能,同时该数据用于监控告警。 如果该值为0,说明可能存在上游把数据都吞掉的情况,需要查看上游数据是否一直未被消费,导致输出阻塞。 | 条/秒 |
|
numRecordsOutOfSinkPerSecond (OUT RPS) | 数据目的Sink端每秒输出记录数。 | 用于测量每个Sink端每秒钟输出的记录数,适用于需要了解每个Sink的输出速度的场景。例如,在一个数据流中,不同的Sink可能会输出不同数量的记录。 使用numRecordsOutOfSinkPerSecond可以帮助您了解每个Sink的输出速度,并对数据流进行调整以达到更好的性能。该数据用于监控告警,如果该值为0,说明可能是作业代码逻辑错误,导致全部数据被过滤了,需要查看作业代码逻辑。 | 条/秒 |
|
pendingRecords | 源端未读取数据的条数。 | 外部系统中尚未被Source拉取的数据条数。 | 条 |
|
sourceIdleTime | 源端未处理数据的时间。 | 该指标反映Source是否有闲置。如果该指标的值较大时,说明您的数据在外部系统中的产生速率较低。 | 毫秒(ms) |
|
Checkpoint
指标 | 含义 | 详情 | 单位 |
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 | 状态数据的大小。 | 通过观测该指标,您可以:
| Bytes | 实时计算引擎VVR 4.0.12及以上版本。 |
State File Size | 状态数据文件的大小。 | 通过观测该指标,您可以:
| Bytes | 实时计算引擎VVR 4.0.13及以上版本。 |
CEP
指标 | 含义 | 详情 | 单位 | 支持的连接器 | 版本限制 |
patternMatchedTimes | Pattern匹配成功的次数。 | 评估规则匹配效果是否满足预期。 | 次 | 所有连接器均支持。 | 实时计算引擎VVR 6.0.1及以上版本。 |
patternMatchingAvgTime | Pattern匹配的平均耗时。 | 评估规则匹配性能是否满足预期。 | 微秒(us) | ||
numLateRecordsDropped | 数据迟到累计丢弃数。 | 评估事件数据源的乱序程度以及Watermark策略是否合理。 | 条 |
IO
指标 | 含义 | 详情 | 单位 | 支持的连接器 |
numBytesIn | 输入字节总数。 | 查看上游吞吐的输入情况,协助您观察作业流量表现。 | Bytes |
|
numBytesInPerSecond | 每秒输入字节总数。 | 查看上游流速的输入情况,协助您观察作业流量表现。 | Bytes/秒 |
|
numBytesOut | 输出字节总数。 | 查看上游吞吐的输出情况,协助您观察作业流量表现。 | Bytes |
|
numBytesOutPerSecond | 每秒输出字节总数。 | 查看上游吞吐输出情况,协助您观察作业流量表现。 | Bytes/秒 |
|
Task numRecords I/O | 每个Subtask收到和输出的总数据量。 | 根据该指标判断作业是否存在I/O瓶颈。 | 条 |
|
Task numRecords I/O PerSecond | 每个Subtask每秒收到和输出的总数据量。 | 判断作业是否存在I/O瓶颈并且通过速率判断严重程度。 | 条/秒 |
|
currentSendTime | 输出到下游系统的每个Subtask发送最近一条数据的用时。 | 该指标值较小时,说明Subtask输出过慢。 | 毫秒(ms) |
|
Watermark
指标 | 含义 | 详情 | 单位 | 支持的连接器 |
Task InputWatermark | 每个Task收到最近一条水印的时间。 | 说明TM收到数据的延时情况。 | 无 | 不涉及连接器 |
watermarkLag | Watermark延迟。 | 判断Subtask级别的作业延迟情况。 | 毫秒(ms) |
|
JM资源
指标 | 含义 | 详情 | 单位 |
JM CPU Load | 单个JM CPU的负载。 | 如果该值长期大于100%,说明CPU很繁忙,负载很高。这可能会影响系统性能,导致系统卡顿、响应时间过长等问题。 说明 实时计算引擎VVR 6.0.6及以上版本不支持该指标,可查看JM CPU Usage指标进行CPU使用率监控。 | 无 |
JM CPU Usage | 单个JM CPU的CPU使用率。 | 该值反映Flink对CPU时间片的占用情况,1个Core的CPU用满了就是100%,4个Core用满了就是400%。如果该值长期大于100%则说明CPU很繁忙。如果负载很高,但CPU使用率却比较低,可能因为频繁的读写操作导致不可中断睡眠状态的进程过多。 说明 仅实时计算引擎VVR 6.0.6及以上版本支持该指标。 | 无 |
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资源
指标 | 含义 | 详情 | 单位 |
TM CPU Load | 单个TM CPU的负载。 | 指一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息。通常可以理解为CPU的繁忙程度,和CPU核数相关,Flink里面的CPU Load是CPU Usage/CPU核数。大于这个值,说明CPU处理可能有堵塞。 说明 实时计算引擎VVR 6.0.6及以上版本不支持该指标,可查看TM CPU Usage指标进行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创建后加载类的总数或卸载类的总数过大,会导致占用过大内存空间,从而影响作业性能。 | 无 |