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

Flink的cdc全量同步的话 对于cdc来说会一直保留着表的存量数据吗?

Flink的cdc全量同步的话 对于cdc来说会一直保留着表的存量数据吗?

展开
收起
三分钟热度的鱼 2023-10-18 20:18:07 223 0
4 条回答
写回答
取消 提交回答
  • 在Flink的CDC全量同步过程中,会保留表的存量数据。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,然后写入到消息中间件中以供其他服务进行订阅及消费。因此,全量同步阶段并不会因为使用了CDC而有所不同,存量数据仍会被保留。同时,增量监听binlog日志同步的时候也不会把全部数据都加载到内存。

    2023-10-21 17:11:45
    赞同 展开评论 打赏
  • Flink CDC (Change Data Capture) 是一种用于捕获数据库中数据变化的技术,通常用于实时数据流处理。CDC 不保留表的存量数据,它主要关注的是捕获表中发生的变更操作,如插入、更新和删除操作,然后将这些变更操作传递给下游处理或目标系统。

    CDC 主要工作方式如下:

    1. 初始全量加载:当启动 CDC 任务时,通常需要进行一次全量加载操作,以确保目标系统有表的初始数据。这一次全量加载可能会从数据库中复制整个表的数据。

    2. 捕获变更:一旦进行了全量加载,CDC 会持续监测数据库中的变更操作。这包括新的插入、更新和删除操作。

    3. 发送变更:CDC 将捕获到的变更操作以数据流的形式传递给下游处理或目标系统。这可以是其他应用程序、数据仓库或数据湖等。

    4. 保持同步:CDC 会不断地捕获新的变更操作,以保持目标系统与源数据库的同步。CDC 不保留历史变更,只关注最新的变更。

    因此,CDC 不会一直保留表的存量数据,它主要用于捕获和传递变更操作。如果您需要保留历史数据,您可能需要考虑其他数据同步或备份策略,如定期备份数据库表或使用数据仓库来保留历史数据。

    2023-10-19 14:49:19
    赞同 展开评论 打赏
  • 是的,Flink的CDC全量同步会一直保留表的存量数据。这是因为Flink的CDC全量同步需要读取整个表的数据,并将其转换为流数据。如果表的存量数据很大,那么这个过程可能会非常耗时和消耗资源。
    为了降低这个过程的消耗,可以使用Flink的增量同步。增量同步只读取表的增量数据,并将其转换为流数据。这样,即使表的存量数据很大,也可以更快地完成数据同步。
    在Flink中,可以使用Flink CDC API来实现增量同步。以下是一个使用Flink CDC API实现增量同步的示例:

    Properties props = new Properties();
    props.setProperty("url", "jdbc:mysql://localhost:3306/testdb");
    props.setProperty("user", "sa");
    props.setProperty("password", "password");
    
    // 创建一个Flink CDC Consumer
    FlinkCDCConsumer consumer = new FlinkCDCConsumer("cdc-sink", new JDBCSourceParameters(props));
    
    // 创建一个Flink CDC Source
    FlinkCDCSource source = new FlinkCDCSource("cdc-source", consumer);
    
    // 创建一个Flink TableEnvironment
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
    
    // 创建一个Flink Table Schema
    TableSchema schema = TableSchema.builder()
        .field("id", DataTypes.BIGINT())
        .field("name", DataTypes.STRING())
        .build();
    
    // 创建一个Flink Table
    Table table = tableEnv.fromSource(source, schema);
    
    // 执行查询
    tableEnv.executeSql("SELECT * FROM cdc-source");
    

    在这个示例中,我们首先创建了一个Flink CDC Consumer,然后创建了一个Flink CDC Source,并将这两个对象连接在一起。然后,我们创建了一个Flink TableEnvironment,并创建了一个Flink Table Schema和一个Flink Table。最后,我们执行了一个查询,将MySQL中的增量数据转换为流数据。
    需要注意的是,Flink CDC需要在MySQL上安装CDC服务,并且需要设置正确的配置信息。此外,我们还需要注意数据源的稳定性和可靠性,以确保数据处理任务的正常运行。

    2023-10-18 22:39:19
    赞同 展开评论 打赏
  • 不会动你源数据库的数据。此回答整理自钉群“实时计算Flink产品交流群”

    2023-10-18 20:29:13
    赞同 展开评论 打赏

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

相关产品

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

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