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

flink-cdc如何实现从pg指定时间戳进行同步呢?

flink-cdc如何实现从pg指定时间戳进行同步呢?

展开
收起
小小鹿鹿鹿 2024-02-14 14:33:28 114 0
3 条回答
写回答
取消 提交回答
  • Flink CDC 通过 PostgreSQL 的逻辑复制机制实现数据变更捕获。要从某个特定时间戳开始同步,虽然直接基于时间戳并不现实,但可以间接达到类似效果:

    1. 使用 LSN(Log Sequence Number)

      • 在 PostgreSQL 中,LSN 是日志记录的唯一标识符,它代表了事务提交顺序和 WAL(Write-Ahead Log)中的位置。
      • 要从一个指定的时间点开始同步,首先需要确定该时间点对应的 LSN 值。可以通过查询历史 WAL 文件或日志记录来获得这个值。
      • 然后在配置 Flink CDC 连接 PostgreSQL 时,可以设置起始读取的位置为找到的那个 LSN。
    2. 创建并管理 Replication Slot

      • 创建一个持久化的 Replication Slot,并保持其不推进消费位点,这样可以从保留的历史 WAL 记录中恢复到所需的 LSN。
      • 注意这种方式并不能严格保证从一个精确的时间戳开始,因为可能无法获取到那个时刻的所有变更,特别是如果日志已经循环写入过且旧日志已被删除。
    3. 主从切换的影响

      • 在主从切换场景下,如果新的主库上没有包含旧主库在切换时未发送出去的日志部分,确实会导致增量同步丢失数据。
      • 如果要确保数据一致性,需要在主从切换过程中进行额外的数据保护措施,比如确保切换期间所有已提交事务的日志都已传输到至少一个备库,并且 Flink CDC 任务连接的是能够提供完整变更记录的数据库实例。

    综上所述,尽管 Flink CDC 本身并没有直接支持按照时间戳启动同步的功能,但是结合 PostgreSQL 的逻辑复制特性,通过合理管理和配置 Replication Slot 及其关联的 LSN,可以在一定程度上模拟从特定时间点开始同步。不过,在实际生产环境中,必须充分考虑容灾、数据完整性及主从切换对数据同步的影响,确保采取适当的备份与恢复策略。

    2024-02-21 17:07:07
    赞同 展开评论 打赏
  • 使用逻辑复制 slot 以及对应的LSN(Log Sequence Number)来间接达到类似效果。首先,你需要确定想要开始同步的时间点所对应的LSN。

    2024-02-15 08:55:01
    赞同 展开评论 打赏
  • 支持不了,PG从原理上就不支持。除非你提前创建一个slot, 这个slot一直不推进消费位点,才能保证日志一直不被删除。这种只能你自己做了,cdc框架做不了, 可以参考这篇文章,
    https://www.decodable.co/blog/logical-replication-from-postgres-16-stand-by-servers-part-2-of-2?utm_source=twitter&utm_campaign=blog&utm_term=gm&utm_medium=social&utm_content=postgres-logical-replication-standby-pt2
    ,自己在另一个备用机维护一个slot进行同步推进offset。后续框架最多加一个从slot指定offset恢复, 前提是这个offset > 这个slot的confirm offset,主要是pg会快速回收已经被confirmed的log,不回收又容易影响存储。此回答来自钉群Flink CDC 社区。

    2024-02-14 15:15:52
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载