本文为您介绍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指标,那么您可以通过该指标分析数据在外部系统的滞留量。
概览
指标 | 含义 | 详情 | 单位 | 支持的连接器 |
Num of Restarts | 作业错误恢复次数。 | 作业出错重启次数,不包含JM Failover次数。查看作业可用性,协助您查看作业状态。 | 次数 | 不涉及 |
current Emit Event Time Lag | 业务延时。 | 该延时较大时,说明作业可能在拉取数据或者处理数据上存在延时。 | 毫秒(ms) |
|
current Fetch Event Time Lag | 传输延时。 | 该延时较大时,说明作业可能在拉取数据上存在延时。您需要查看网络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) |
|
系统检查点
指标 | 含义 | 详情 | 单位 |
Num of Checkpoints | Checkpoint数量。 | 总览Checkpoint状态,协助您设置Checkpoint告警。 | 个 |
lastCheckpointDuration | 最近一个Checkpoint的持续时间。 | 如果Checkpoint耗时过长或者超时,可能由于状态过大、临时网络原因、Barrier未对齐或者数据存在反压等原因造成。 | 毫秒(ms) |
lastCheckpointSize | 最近一个Checkpoint的大小。 | 最近一次实际上传的Checkpoint大小,可以在Checkpoint有瓶颈时协助分析Checkpoint性能。 | Bytes |
状态
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及以上版本。 |
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) |
|
水印
指标 | 含义 | 详情 | 单位 | 支持的连接器 |
Task InputWatermark | 每个Task收到最近一条水印的时间。 | 说明TM收到数据的延时情况。 | 无 | 不涉及连接器 |
watermarkLag | Watermark延迟。 | 判断Subtask级别的作业延迟情况。 | 毫秒(ms) |
|
CPU
指标 | 含义 | 详情 | 单位 |
JM CPU Usage | 单个JM CPU的CPU使用率。 | 该值反映Flink对CPU时间片的占用情况,1个Core的CPU用满了就是100%,4个Core用满了就是400%。如果该值长期大于100%则说明CPU很繁忙。如果负载很高,但CPU使用率却比较低,可能因为频繁的读写操作导致不可中断睡眠状态的进程过多。 说明 仅实时计算引擎VVR 6.0.6及以上版本支持该指标。 | 无 |
TM CPU Usage | 单个TM CPU的CPU使用率。 | 该值反映Flink对CPU时间片的占用情况,1个Core的CPU用满了就是100%,4个Core用满了就是400%。如果该值长期大于100%则说明CPU很繁忙。如果负载很高,但CPU使用率却比较低,可能是因为频繁的读写操作导致不可中断睡眠状态的进程过多。 | 无 |
内存
指标 | 含义 | 详情 | 单位 |
JM Heap Memory | JM的堆内存。 | 查看JM堆内存的变化。 | Bytes |
JM NonHeap Memory | JM的非堆内存。 | 查看JM非堆内存的变化。 | Bytes |
TM Heap Memory | TM的堆内存。 | 查看TM堆内存的变化。 | Bytes |
TM nonHeap Memory | TM的非堆内存。 | 查看TM非堆内存的变化。 | Bytes |
TM Mem (RSS) | 通过Linux获取整个进程的内存。 | 查看进程内存的变化。 | Bytes |
JVM
指标 | 含义 | 详情 | 单位 |
JM Threads | JM线程数。 | JM线程数过多会导致占用过大的内存空间,从而降低作业稳定性。 | 个 |
TM Threads | TM线程数。 | TM线程数过多会导致占用过多内存,从而降低作业稳定性。 | 个 |
JM GC Count | JM GC次数。 | GC次数过多会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业级别的故障原因。 | Times |
JM GC Time | 每次JM GC时间。 | 长时间GC会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业级别的故障原因。 | 毫秒(ms) |
TM GC Count | TM GC次数。 | GC次数过多会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业Task级别的故障原因。 | 次数 |
TM GC Time | 每次TM GC时间。 | 长时间GC会导致占用过大内存空间,从而影响作业性能。该指标协助您进行作业诊断,排查作业级别的故障原因。 | 毫秒(ms) |
JM ClassLoader | JM所在的JVM在创建后,加载或卸载的类总数。 | JM所在的JVM创建后,加载类的总数或卸载类的总数过大,会导致占用过大的内存空间,从而影响作业性能。 | 无 |
TM ClassLoader | TM所在的JVM创建后,加载或卸载的类总数。 | JM所在的JVM创建后加载类的总数或卸载类的总数过大,会导致占用过大内存空间,从而影响作业性能。 | 无 |
连接器 - Mysql
指标 | 含义 | 单位 | 应用场景 | 版本限制 |
isSnapshotting | 作业是否在处理全量数据阶段(1表示处于该阶段) | 无 | 确定作业处理阶段 | 实时计算引擎VVR 8.0.9及以上版本。 |
isBinlogReading | 作业是否在处理增量数据阶段(1表示处于该阶段) | 无 | 确定作业处理阶段 | |
Num of remaining tables | 全量阶段等待处理的表的个数 | 个 | 查看剩余未处理的表数量 | |
Num of snapshotted tables | 全量阶段已经处理的表的个数 | 个 | 查看已经处理的表数量 | |
Num of remaining SnapshotSplits | 全量阶段等待处理的分片的个数 | 个 | 查看已经处理的分片数 | |
Num of processed SnapshotSplits | 全量阶段已经处理的分片的个数 | 个 | 查看未处理的分片数 | |
currentFetchEventTimeLag | 数据从产生到从数据库读取出来之间的延迟 | ms | 查看从数据库读取binlog的延迟 | |
currentReadTimestampMs | 当前读取到的最新数据的时间戳 | ms | 查看读取到最新数据时间 | |
numRecordsIn | 已经读取的数据条数 | 条 | 查看已经处理的全部数据量 | |
numSnapshotRecords | 全量阶段已经处理的数据条数 | 条 | 查看全量阶段已处理的数据量 | |
numRecordsInPerTable | 每个表已经读取的数据条数 | 条 | 查看每个表已经处理的全部数据量 | |
numSnapshotRecordsPerTable | 每个表全量阶段已经处理的数据条数 | 条 | 查看每个表全量阶段已处理的数据量 |
连接器 - Kafka
指标 | 含义 | 单位 | 应用场景 | 版本限制 |
commitsSucceeded | 位点提交成功的次数 | 次 | 判断位点提交是否成功 | 实时计算引擎VVR 8.0.9及以上版本。 |
commitsFailed | 位点提交失败的次数 | 次 | 判断位点提交是否成功 | |
Fetch Rate | 拉取数据的频率 | 次/秒 | 判断数据拉取的延迟和速度 | |
Fetch Latency Avg | 拉取数据操作的延迟 | 毫秒 | 判断数据拉取的延迟和速度 | |
Fetch Size Avg | 每次拉取的平均字节数 | 字节 | 判断数据拉取的延迟和速度 | |
Avg Records In Per-Request | 每次拉取的平均消息数 | 条 | 判断数据拉取的延迟和速度 | |
currentSendTime | 发送上一条记录的时间 | 无 | 判断消费进度 | |
batchSizeAvg | 每个批次的平均字节数 | Bytes | 判断数据写入延迟和速度 | |
requestLatencyAvg | 请求的平均延迟 | ms | 判断数据写入延迟和速度 | |
requestsInFlight | 正在进行的请求数 | 无 | 判断数据写入延迟和速度 | |
recordsPerRequestAvg | 每次请求的平均消息数 | 条 | 判断数据写入延迟和速度 | |
recordSizeAvg | 消息的平均字节数 | Bytes | 判断数据写入延迟和速度 |
连接器 - Paimon
指标 | 含义 | 单位 | 应用场景 | 版本限制 |
Number of Writers | Writer实例数量 | 个 | 当前有几个分桶正在写入。若数量过大,可能会影响写入效率,增加内存消耗。分析分桶数或分区键设置是否合理。 | 实时计算引擎VVR 8.0.9及以上版本。 |
Max Compaction Thread Busy | 小文件合并线程的最大繁忙程度 | 比例 | 当前正在写入的各个分桶中,最近一分钟内,小文件合并线程最多有多少时间在活动。可以反映小文件合并的压力 | |
Average Compaction Thread Busy | 小文件合并线程平均繁忙程度 | 比例 | 当前正在写入的各个分桶中,最近一分钟内,小文件合并线程最多有多少时间在活动。可以反映小文件合并的压力 | |
Max Number of Level 0 Files | 最大Level 0 文件数量 | 个 | 当前正在写入的各个分桶中,level 0文件(小文件)最多有几个。仅对主键表有意义,可以反映小文件合并的效率能否跟上写入效率 | |
Average Number of Level 0 Files | 平均Level 0 文件数量 | 个 | 当前正在写入的各个分桶中,level 0文件(小文件)平均有几个。仅对主键表有意义,可以反映小文件合并的效率能否跟上写入效率 | |
Last Commit Duration | 上次Commit耗时 | 毫秒 | 若时间太长,应检查是否有过多的分桶正在同时写入。 | |
Number of Partitions Last Committed | 上次Commit中写入的分区数量 | 个 | 若数量过大,可能会影响写入效率,增加内存消耗。分析分桶数或分区键设置是否合理。 | |
Number of Buckets Last Committed | 上次Commit中写入的分桶数量 | 个 | 若数量过大,可能会影响写入效率,增加内存消耗。分析分桶数或分区键设置是否合理。 | |
Used Write Buffer | 已使用的Write Buffer的内存大小 | 字节 | 所有task manager的writer节点已使用的buffer大小。该buffer将占用Java堆内存,若设置过大可能会导致OOM。 | |
Total Write Buffer | 分配给Write Buffer的总内存大小 | 字节 | 所有task manager的writer节点设置的uffer大小。该buffer将占用Java堆内存,若设置过大可能会导致OOM,。 |
数据摄入
指标 | 含义 | 单位 | 应用场景 | 版本限制 |
isSnapshotting | 作业是否在处理全量数据阶段(1表示处于该阶段) | 无 | 确定作业处理阶段 | 实时计算引擎VVR 8.0.9及以上版本。 |
isBinlogReading | 作业是否在处理增量数据阶段(1表示处于该阶段) | 无 | 确定作业处理阶段 | |
Num of remaining tables | 全量阶段等待处理的表的个数 | 个 | 查看剩余未处理的表数量 | |
Num of snapshotted tables | 全量阶段已经处理的表的个数 | 个 | 查看已经处理的表数量 | |
Num of remaining SnapshotSplits | 全量阶段等待处理的分片的个数 | 个 | 查看已经处理的分片数 | |
Num of processed SnapshotSplits | 全量阶段已经处理的分片的个数 | 个 | 查看未处理的分片数 | |
currentFetchEventTimeLag | 数据从产生到从数据库读取出来之间的延迟 | ms | 查看从数据库读取binlog的延迟 | |
currentReadTimestampMs | 当前读取到的最新数据的时间戳 | ms | 查看读取到最新数据的时间 | |
numRecordsIn | 已经读取的数据条数 | 条 | 查看已经处理的全部数据量 | |
numRecordsInPerTable | 每个表已经读取的数据条数 | 条 | 查看每个表已经处理的全部数据量 | |
numSnapshotRecords | 全量阶段已经处理的数据条数 | 条 | 查看全量阶段已处理的数据量 | |
numSnapshotRecordsPerTable | 每个表全量阶段已经处理的数据条数 | 条 | 查看每个表全量阶段已处理的数据量 |