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

Flink CDC中 flink离线同步,是不是不支持删除么?

Flink CDC中 flink离线同步,是不是不支持删除么?sink表和source表定义了主键,源表删除了一条数据,同步后目标表并没有删除数据。我是将mysql表同步到sqlserver。

展开
收起
小易01 2023-07-26 08:33:02 503 0
4 条回答
写回答
取消 提交回答
  • 在 Flink CDC 中,离线同步通常是通过读取源表的变更日志(如 MySQL 的 binlog)来捕获数据变化,并将其同步到目标表。然而,Flink CDC 在默认情况下并不支持删除操作的完全同步。

    这是因为在 CDC 场景中,删除操作有时无法直接通过日志解析得到完整的信息,而只能得到一个"删除事件"的记录。因此,默认情况下,Flink CDC 将删除操作视为一条特殊的更新操作,即将相应记录的状态设置为已删除,而不是实际从目标表中删除数据。

    如果你需要实现在目标表中删除与源表对应的记录,可以考虑以下几种方案:

    1. 利用 CDC 的元数据:Flink CDC 会将源表的变更记录存储在元数据中,你可以通过编写自定义逻辑来解析和处理这些元数据,并在目标表中执行对应的删除操作。

    2. 扩展 CDC 功能:根据具体需求,可以自行扩展 Flink CDC 的功能,例如在解析 binlog 时,检测到删除操作时触发相应的删除逻辑。这可能需要深入了解 Flink CDC 的源码以及相关的底层实现细节。

    3. 结合其他工具:如果需要强大的、满足更复杂需求的同步功能,你可以考虑使用其他专门的数据同步工具,如Debezium、Maxwell等。这些工具提供了更多的配置选项和功能来支持源表数据的完整同步。

    2023-07-31 22:34:39
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在 Flink CDC 中,离线同步是指在异步模式下使用 Flink CDC 进行数据同步。由于异步模式下的数据同步存在一定的延迟,因此在数据删除时可能会出现一定的问题。
    具体来说,如果在源数据库中删除了某条数据,在异步模式下,可能会出现以下两种情况:
    CDC 任务已经抽取了该数据并写入到目标数据库中,此时删除源数据不会影响目标数据。
    CDC 任务尚未抽取该数据,此时删除源数据会导致 CDC 任务无法抽取该数据,从而无法将该数据写入到目标数据库中。

    2023-07-29 13:57:25
    赞同 展开评论 打赏
  • 存在即是合理

    Flink CDC 的离线同步功能支持删除操作,但是需要在源表和目标表中都定义主键。当源表中的数据被删除时,CDC会将该行数据从同步任务中过滤掉,并将其标记为已删除。当 CDC 将数据写入目标表时,目标表也会自动忽略这些已删除的数据。如果在 MySQL 表和 SQL Server 表之间进行同步,并且发现同步后的目标表没有删除数据,可能是因为没有正确配置主键。

    2023-07-27 14:10:18
    赞同 展开评论 打赏
  • 意中人就是我呀!

    启动的时候先用快照同步,如果这时候已经删了,那快照里不会有。等快照同步完他从他启动的那个时间点去同步Binlog,但是那个时间点之后的Binlog里没有删除语句,所以不会删。此回答整理至钉群“Flink CDC 社区”。

    2023-07-26 12:22:01
    赞同 展开评论 打赏

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

相关产品

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

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