本文介绍数据摄入作业中的常见问题与解决方案。
快照阶段执行Checkpoint时报错,JobMananger内存不足
影响面
此问题影响使用MySQL Source的Flink CDC数据摄入作业。
此问题可能在使用任意实时计算VVR引擎版本的作业中出现。
异常表现
任务在全量快照阶段频繁异常重启,查看JobManager日志可见包含OutOfMemory内存不足错误栈。
在监控告警界面的数据摄入相关指标中,可以看到“Num of remaining SnapshotSplits”和“Num of processed SnapshotSplits”的总数非常多。

异常根因
在MySQL Source执行全量阶段快照时,需要将全部分片的元数据信息持久化保存到状态中。在作业数据量较大、或是分片大小较小时,JM会切分出产生大量需要读取的分片,导致出现OutOfMemory的报错。
解决方案
增大JobManager分配的内存资源数量。
调整运行参数
jobmanager.memory.heap.size和jobmanager.memory.off-heap.size,增大JobManager可使用的堆内及堆外内存。
作业增量阶段从状态恢复时失败,JobMananger内存不足
影响面
此问题影响使用MySQL Source的Flink CDC数据摄入作业。
此问题影响使用实时计算VVR 11.1及更低版本的作业。
异常表现
任务已经进入增量阶段,但在从状态中恢复时JobManager报错,日志提示内存不足。
异常根因
实时计算VVR 11.1及更低版本引擎在全量切换到增量阶段之后,有可能无法正确清理状态中持久化保存的表结构信息,导致从Checkpoint恢复时内存不足。
解决方案
升级实时计算Flink引擎到VVR 11.2或更高版本。
快照即将结束时作业失败,TaskManager内存不足
影响面
此问题影响使用MySQL Source的Flink CDC数据摄入作业。
此问题可能在使用任意实时计算VVR引擎版本的作业中出现。
异常表现
MySQL全量阶段即将结束,只剩下少数几个分片未处理时作业 OOM。
在TaskManager 的日志中搜索
using select statement关键字,发现最后一个无界查询中包含大量数据。
异常根因
全量阶段读取的时间过长,因此最后一个分片积累了大量需要读取的增量数据,导致消费该分片数据时内存不足。
解决方案
设置MySQL Source的
scan.incremental.snapshot.unbounded-chunk-first.enabled: true参数,并重新进行快照。
使用 pt-osc 等无锁变更工具变更表结构后,无数据输出
影响面
此问题影响使用MySQL Source的Flink CDC数据摄入作业。
此问题影响使用实时计算VVR 11.1及更低版本的作业。
异常表现
作业在执行无所表结构变更后持续运行,无异常重启;
监控告警中的CurrentFetchTimeLag正常推进;
MySQL Source无数据输出,CurrentEmitTimeLag也不再更新。
异常根因
早期版本不支持无锁表结构变更工具产生的DDL变更事件。
解决方案
升级实时计算Flink引擎到11.2或更高版本;
设置MySQL Source的
scan.parse.online.schema.changes.enabled: true参数。
使用 pt-osc 等无锁变更工具变更表结构后,作业Failover
影响面
此问题影响使用MySQL Source的Flink CDC数据摄入作业。
此问题影响使用实时计算VVR 11.1及更低版本的作业。
异常表现
作业在执行无所表结构变更后异常重启,Transform算子报错列类型不匹配。
异常根因
实时计算Flink引擎VVR 11.1版本存在已知问题,在无锁表结构变更的同时插入大量数据,有概率导致下发无法解析的事件。
解决方案
升级实时计算Flink引擎到11.2或更高版本,并从无锁表结构变更前的快照重启。
从表结构变更前的快照恢复作业报错
影响面
此问题影响使用MySQL Source的Flink CDC数据摄入作业。
此问题影响使用实时计算VVR 11.1及更低版本的作业。
异常表现
从历史快照有状态重启,且执行快照后又发生了表结构变更。
作业消费Binlog时抛出异常,提示表结构不匹配。
异常根因
实时计算Flink引擎VVR 11.1及更早版本不支持从表结构不兼容的位点做有状态启动。
解决方案
升级实时计算Flink引擎到11.2或更高版本,即可从表结构变更前的快照重启。
Flink CDC 作业全量阶段与增量阶段对 Binlog 保留时间有什么要求?
影响面
此问题影响使用 MySQL Source 的 Flink CDC 数据摄入作业。
此问题可能在使用任意实时计算 VVR 引擎版本的作业中出现。
异常表现
作业在全量阶段异常失败,日志提示 Binlog 文件不存在或已过期。
全量阶段数据同步出现漏同步或数据不一致。
异常根因
Flink CDC 作业在全量阶段和增量阶段对 Binlog 的消费位点要求不同:
全量阶段:Flink CDC 在读取全量历史快照数据的同时,记录快照开始时的 Binlog 位点。全量阶段完成后,需从该位点消费 Binlog 以补齐快照期间的增量数据。由于全量阶段耗时较长,快照开始时的 Binlog 可能已被数据库的 Binlog 保留策略清理,导致同步失败。
增量阶段:作业消费较新的 Binlog,通常不受 Binlog 过期清理策略的影响。
解决方案
确认作业当前所处的消费阶段。在监控告警页面查看数据摄入相关指标,若"Num of remaining SnapshotSplits"大于 0,则说明作业仍处于全量阶段。
对于因 Binlog 被清理导致的全量阶段失败,建议执行以下操作:
无状态重启作业,并适当增加作业并发数以提升全量阶段的处理速度,缩短全量阶段耗时。
延长数据库的 Binlog 保留时间,确保全量阶段完成前 Binlog 不被清理。
检查并调整启动位点配置,合理设置 Binlog 启动位点。