有遇到Flink CDC这个问题吗?
老是报检查点执行异常
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 Flink CDC 时,检查点(Checkpoint)执行异常是一个常见问题。根据知识库中的信息,以下是可能导致该问题的原因及对应的解决方案。
Flink 的检查点机制依赖于 Chandy-Lamport 算法,分为同步阶段和异步阶段。如果作业存在反压问题,可能会导致同步阶段的 Barrier 对齐时间过长,从而引发检查点超时。
诊断方法: - 在运维中心 > 作业运维页面,查看 Checkpoint 历史记录。 - 观察 Sync Duration
和 Alignment Duration
是否较长。如果是,则说明瓶颈出现在同步阶段。
解决方案: - 优化反压问题:参考 SQL 作业或 DataStream 作业大状态导致反压的调优原理与方法,优先解决反压问题。 - 调整并行度:适当增加算子的并行度,缓解数据处理压力。 - 优化数据流设计:减少数据倾斜或热点问题,确保数据均匀分布。
如果异步阶段的 Async Duration
较长,且 Checkpointed Data Size
较大,则可能是由于状态数据量过大导致上传时间过长。
诊断方法: - 查看 lastCheckpointDuration
和 lastCheckpointSize
指标,判断是否存在状态数据量过大的问题。
解决方案: - 启用增量检查点:通过配置增量检查点(Incremental Checkpoint),减少每次上传的数据量。
execution.checkpointing.incremental: true
state.backend.rocksdb.localdir: /path/to/local/dir
state.backend.rocksdb.compression.type: snappy
如果您使用的是 MongoDB CDC 连接器,以下问题可能导致检查点异常:
问题 1:无效 Resume Token - 如果 MongoDB 的 oplog.rs 集合大小不足,可能导致 Resume Token 对应的记录被清理,从而无法从检查点恢复。
解决方案: - 调整 oplog.rs 大小:确保 oplog.rs 的保留时间足够长,避免记录被过早清理。
db.adminCommand({replSetResizeOplog: 1, size: <new_size_in_MB>})
问题 2:用户名密码错误 - 如果 MongoDB 用户凭证未正确配置,可能导致连接失败。
解决方案: - 在 WITH 参数中添加 authSource
配置,指定用户所在的数据库。
'connection.options' = 'authSource=用户所在的DB'
如果您使用的是 MySQL CDC 连接器,以下问题可能导致检查点异常:
问题 1:Binlog 文件过期 - 如果 Binlog 文件保留时间过短,可能导致 Flink 无法读取所需的 Binlog 数据。
解决方案: - 延长 Binlog 保留时间:
SET GLOBAL expire_logs_days = 7;
问题 2:全量阶段表结构变更 - 如果在全量阶段对表结构进行了修改(如新增列),可能导致 Schema 不匹配,抛出 NullPointerException
。
解决方案: - 重启作业并清理下游表:停止作业,删除同步的下游表,然后无状态启动作业。
问题 1:Watermark 推进延迟 - 如果上游数据源(如 Kafka)的某些分区长时间无数据进入,可能导致 Watermark 无法推进,进而影响窗口计算和检查点完成。
解决方案: - 设置空闲分区超时时间:
table.exec.source.idle-timeout: 1s
问题 2:MiniBatch 缓存问题 - 如果 table.exec.mini-batch.size
未正确配置,可能导致 LocalGroupAggregate 节点数据积压。
解决方案: - 调整 MiniBatch 缓存参数:
table.exec.mini-batch.size: 1000
通过上述分析,您可以根据具体的异常表现(如同步阶段瓶颈、异步阶段上传慢等)定位问题,并采取相应的优化措施。如果问题仍未解决,建议结合具体日志信息进一步排查,或联系阿里云技术支持获取帮助。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。