开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC用oracle-cdc?它是不是不能从ckp恢复?

Flink CDC用oracle-cdc?它是不是不能从ckp恢复。我用cdc同步oracle,中间把任务停掉,然后从ckp恢复,发现暂停期间的变更日志会漏掉,scan.mode设的:latest-offset?

展开
收起
真的很搞笑 2023-12-19 08:08:08 60 0
3 条回答
写回答
取消 提交回答
  • 在使用Flink CDC从Oracle数据库同步数据时,确实存在checkpoint恢复后可能无法捕获到任务暂停期间的变更日志的问题。这是因为Oracle CDC通常依赖于日志miner读取归档日志或在线重做日志,而这些日志在Flink作业停止和重启的过程中可能会被Oracle系统清理或者覆盖。

    当你设置scan.mode: latest-offset时,Flink CDC会在启动时从Oracle中最新的offset开始消费变更数据,这意味着如果在checkpoint之前的变更日志已经被清理掉,那么这些变更就会丢失。

    要解决这个问题,可以考虑以下策略:

    1. 保留足够的日志
      在Oracle端,确保归档日志有足够的空间并配置成保留足够长的时间,以便在Flink CDC任务恢复时能够访问到之前的数据。

    2. 手动记录最后一个处理的offset
      如果Oracle CDC连接器本身不支持自动从checkpoint恢复,你可能需要自定义逻辑来存储和恢复上次成功处理的offset,这样在任务重启时可以从该点继续读取。

    3. 监控与报警
      设置监控和报警机制,一旦发现Flink CDC任务失败或异常停止,尽快恢复任务以减少日志丢失的风险。

    4. 全量+增量同步方案
      结合定期的全量同步(例如通过数据库快照或导出导入)与增量CDC的方式,即使增量部分有短暂的数据丢失,也可以通过下一次全量同步进行补充。

    2023-12-30 12:26:08
    赞同 展开评论 打赏
  • 从savepoint恢复试下 ,此回答整理自钉群“Flink CDC 社区”

    2023-12-19 16:35:28
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    Flink CDC在Oracle数据库中实现增量数据同步,基于Debezium的LogMiner技术。当使用scan.mode=latest-offset模式采集Oracle数据时,Flink CDC会利用Oracle的归档日志来获取最新的数据,并且在此过程中不会对表进行锁定操作。

    然而,关于从ckp恢复后漏掉变更日志的问题,这可能是因为CKP(Checkpoint)机制与CDC(Change Data Capture)机制的工作方式之间存在一定的冲突。具体来说,当CKP被触发时,Flink任务可能会暂停正在处理的CDC事务,导致在这段时间内发生的变更无法被正确捕获。因此,如果在CKP触发期间发生了数据变更,那么这些变更可能会被遗漏。

    为了解决这个问题,你可以考虑调整Flink作业的并行度、并发数等参数,或者尝试使用其他模式(如:timestamp)来代替latest-offset模式,以便更好地处理这种情况。同时,确保Oracle中相关表已开启归档日志和补充日志,因为Flink CDC基于Debezium的LogMiner实现,LogMiner需要使用Oracle的归档日志和补充日志来获取变更数据。

    2023-12-19 14:40:58
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
    PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
    Oracle云上最佳实践 立即下载

    相关镜像