本文介绍数据摄入作业中的常见问题与解决方案。
快照阶段执行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或更高版本,即可从表结构变更前的快照重启。