事件介绍
Flink 作业的 JobManager 负责整个作业的管理和调度工作,它是一个 JVM 进程,有着自己的堆内存空间。对于使用 FLIP-27 接口的数据源(Source)Connector,其 Enumerator 会把各类分片信息会记录到堆内存中。如果分片过多,就可能造成堆内存用量过高,影响整个作业的稳定性。
当 JVM 的堆内存空间即将耗尽时,会通过 Full GC(内存回收机制)来释放空间。如果每次的回收量很小,难以及时释放堆内存空间时,JVM 会频繁而持续地触发 Full GC,该操作会占用大量的 CPU 时间,造成作业的执行线程无法正常工作,此时会触发本事件。
说明
该功能目前为 Beta 版,暂不支持规则的自定义,后续该能力会陆续上线。
判定标准
系统每5分钟会检测一次 Flink 作业的 JobManager 的 Full GC 耗时。
当发现 JobManager 的 Full GC 耗时增量占整个检测周期的30%以上(即5分钟内 Full GC 耗时超过1.5分钟)时,表明作业出现了严重的 Full GC 问题,会触发该事件。
注意
为了避免频繁告警,每个作业的每个运行实例 ID 每小时最多触发一次该事件的推送。
告警配置
处理建议
此外,如果您使用的是 MySQL CDC 数据源,则建议您在 WITH 参数中,增加单个分片的大小,即调大
scan.incremental.snapshot.chunk.size
参数,以避免分片数过多导致 JobManager 堆内存用尽。如果作业日志中没有找到
OutOfMemoryError: Java heap space
等关键字,且目前作业暂时正常运行,我们建议对该作业 配置告警,将流计算作业失败事件加入告警规则,以第一时间获取作业崩溃的事件推送。