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

Flinkcdc怎样只做增量同步 不改变源库数据

已解决

源库表和目标库表都有一个相同的主键值,比如说都是1,那么我在同步的时候如何保证目标库表的1这一列不被update

展开
收起
游客xjjehcayqor4u 2023-08-29 07:28:26 186 0
7 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com
    采纳回答

    在阿里云实时计算Flink版中使用Flink CDC进行增量同步时,可以采取以下措施保证目标库表的主键列不被update:

    1. 选择正确的主键策略:在Flink CDC中,可以使用主键策略来决定是否将源表的变化应用于目标表。在您的情况下,如果源库表和目标库表都有相同的主键值,可以选择将主键策略设置为只应用插入(InsertOnly),以避免更新操作。这样,Flink CDC将仅将源表中的插入操作应用于目标表。

    2. 数据写入目标表的幂等性:即使选择了只应用插入的主键策略,仍然存在由于重复消息或其他原因导致相同主键数据插入目标表的情况。为了保证数据一致性,需要在目标表中实现幂等性写入。幂等性写入意味着对于相同的主键值,多次执行相同操作的结果与执行一次操作的结果相同。您可以在目标表中使用一些策略(如唯一索引、忽略重复插入等)来实现幂等性。

    2023-08-29 16:16:36
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    备份:在同步之前,请确保已经备份了源库表和目标库表的数据,以便将来出现问题时可以恢复数据。image.png

    事务一致性:使用事务将更新操作保存在数据库中,以确保事务的一致性。这样即使目标库表中的列值发生变化,也可以保证源库表和目标库表保持一致。
    触发器:如果源库表和目标库表的主键值不同,则可以在目标库表中创建一个触发器,当主键值发生改变时通知源库表进行相应的更新。image.png

    版本控制:如果源库表和目标库表的主键值确实发生了变化,但不想重新执行所有的更新操作,可以使用版本控制功能记录每次更新的差异,并在需要时进行回滚操作。

    2023-08-29 23:27:16
    赞同 展开评论 打赏
  • 您好!Flink CDC可以通过配置只做增量同步,不改变源库数据。具体实现方法如下:

    1. 在源数据库中创建一个触发器,触发器在数据发生变化时触发CDC任务。
    2. 在Flink中配置CDC任务,CDC任务会监视源数据库的变化,当变化发生时,CDC任务会将变化的数据实时处理并写入目标数据库中。
    3. 在CDC任务中,可以使用TableFunction接口来实现对增量数据的处理。通过实现TableFunction接口的eval方法,可以对每一行增量数据进行处理,并将处理后的结果写入目标数据库中。
    4. 在Flink中配置CDC任务的输入和输出,可以使用StreamTableEnvironment和TableEnvironment来配置输入和输出。

    这样就可以保证目标库表的1这一列不被update了。

    2023-08-29 11:49:26
    赞同 展开评论 打赏
  • 十年摸盘键,代码未曾试。 今日码示君,谁有上云事。

    CDC 是 Change Data Capture 的缩写,是一种捕获变更数据的技术,核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。

    Flink CDC 在增量同步、断点续传、全量同步的表现都很好,也支持全增量一体化同步,而很多其他开源方案无法支持全增量一体化同步。

    Flink CDC 是分布式架构,可以满足海量数据同步的业务场景。

    Flink CDC 支持全增量一体化同步,为用户提供实时一致性快照。比如一张表里有历史的全量数据,也有新增的实时变更数据,增量数据不断地往 Binlog 日志文件里写,Flink CDC 会先同步全量历史数据,再无缝切换到同步增量数据,增量同步时,如果是新增的插入数据(上图中蓝色小块),会追加到实时一致性快照中;如果是更新的数据(上图中黄色小块),则会在已有历史数据里做更新。

    Flink CDC 相当于提供了实时物化视图,为用户提供数据库中表的实时一致性快照,用于可以对这些数据做进一步加工,比如清洗、聚合、过滤等,然后再写入下游。

    2023-08-29 09:52:13
    赞同 1 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,在使用阿里云Flink CDC进行增量同步时,可以设置过滤条件,只同步源表中新增、删除和修改的数据,不同步原表中未修改的数据。同时,在同步过程中可以使用数据库的“触发器”等方式,对同步数据进行处理,以达到不修改原表数据的目的。

    至于保证目标库表的主键列不被update,可以在同步过程中指定只同步源库表中发生变化的列。假设在源库表中只有其他列发生了变化,而主键列没有变化,在同步数据到目标库表时,只需要指定同步其他列的数据,不同步主键列的数据即可。具体实现方式可以在阿里云Flink CDC中配置同步规则时进行设置。

    另外,在进行数据同步前,建议先备份目标库表数据,以便在同步过程中出现问题时可以恢复数据。

    2023-08-29 09:11:04
    赞同 展开评论 打赏
  • 在Flink CDC中,如果源库表和目标库表都有相同的主键值,并且您只希望进行增量同步而不修改目标库表的数据,可以采取以下两种方法:

    1. 使用upsert模式:在Flink CDC中,可以选择使用upsert模式进行增量同步。在upsert模式下,当源库表发生变化时,会将变化的数据写入到目标库表,如果目标库表已经存在该主键值,则执行更新操作(update),否则执行插入操作(insert)。为了保证目标库表的1这一列不被update,您可以在配置CDC任务时,将对应的字段设置为不可更新(non-updatable)。

    8e4153b691660452af923a33a39d10ad_p397469.png

    00e368e0e8e097b1c986dd57c2556356_p397471.png

    1. 自定义处理逻辑:另一种方法是通过自定义处理逻辑,在Flink CDC的数据流中对数据进行过滤或转换,以实现不更新目标库表的1这一列。您可以使用Flink提供的各种操作符和函数来处理数据流,根据业务需求进行过滤、转换等操作,然后将结果写入目标库表。
      6fbbcb675c8e181bdb5c88807801c243_p552487.jpg
    2023-08-29 08:31:50
    赞同 1 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    Flink CDC(Change Data Capture)可以通过配置只做增量同步,不改变源库数据。具体实现方法如下:

    • 在源数据库中创建一个触发器,触发器在数据发生变化时触发CDC任务。

    • 在Flink中配置CDC任务,CDC任务会监视源数据库的变化,当变化发生时,CDC任务会将变化的数据实时处理并写入目标数据库中。

    • 在CDC任务中,可以使用TableFunction接口来实现对增量数据的处理。通过实现TableFunction接口的eval方法,可以对每一行增量数据进行处理,并将处理后的结果写入目标数据库中。

    • 在Flink中配置CDC任务的输入和输出,可以使用StreamTableEnvironment和TableEnvironment来配置输入和输出。其中,输入是源数据库的变化数据流,输出是目标数据库的数据流。

    2023-08-29 08:14:14
    赞同 展开评论 打赏
滑动查看更多

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载