首页 > 其他分享 >Flink CDC全量和增量同步数据如何保证数据的一致性

Flink CDC全量和增量同步数据如何保证数据的一致性

时间:2024-04-25 10:35:26浏览次数:17  
标签:同步 CDC 保证数据 Flink 全量 增量 数据

Apache Flink 的 Change Data Capture (CDC) 功能主要用于实时捕获数据库中的变更记录,并将其转换为事件流以供下游处理。为了保证全量和增量数据同步时数据的一致性、不丢失和不重复读取,Flink CDC 采用了以下策略:

一、保证一致性与不丢失

1、使用事务

当进行全量或增量同步时,Flink CDC通过与数据库的事务机制结合使用,Flink会将操作封装为一个事务,使用事务以确保数据的完整性和一致性。

Flink CDC 依赖于数据库的日志(如mysql binlog)来捕获事务级别的更改,意味着它能识别事务的开始和结束,从而确保在处理变更事件时保持事务的一致性。

2、幂等性处理(精准一次处理)

Flink 作为流处理引擎本身支持精确一次(exactly-once)的状态一致性保证,重复性变更数据,Flink CDC只会将其处理一次。通过 checkpoint 和两阶段提交机制,Flink 能够在故障恢复时准确地回滚或重放事件,从而避免数据丢失和重复处理。

如下游为iceberg v2表,iceberg支持去重

3、基于时间戳的检查点

Flink CDC使用基于时间戳的检查点机制来保证数据的不丢失。当进行全量同步时,Flink CDC使用数据库的全量数据时间戳确保读取到的全量数据是最新的。增量同步过程中,使用mysql binlog时间戳确保只读到修改变更。Flink会记录当前处理的位置,并在发生故障时从最近的检查点恢复,这样可以确保不会重复读取已经处理过的数据。

二、全量与增量衔接

1、全量同步阶段

在初次全量同步时,Flink CDC 可以通过扫描数据库表的全量数据并生成某一时刻对应的初始化快照来保证全量数据的一致性。然后开始同步全量数据到目标系统,保证目标库有完整数据副本。
2、增量同步阶段

完成全量同步之后,Flink CDC 会从日志中订阅后续的增量变更,从全量扫描时快照完成的时间点,开始同步数据库的binlog更新日志。增量数据以有序的方式被摄入到流处理系统中,与全量数据的末尾自然衔接。

3、全量和增量平滑过渡

在 Flink CDC 中,全量和增量数据可以无缝整合,确保了在任何给定时间点,下游系统的数据视图都是完整且最新的。

对于具有事务性的变更日志,全量快照和增量日志中的事件是可以按顺序叠加处理的,这样就能形成一个完整的、一致的数据视图。

通过这些机制,Flink CDC 实现了全量数据导入和增量数据实时追加之间的平滑过渡,有效保证了数据的完整性与一致性。

 

标签:同步,CDC,保证数据,Flink,全量,增量,数据
From: https://www.cnblogs.com/robots2/p/18157030

相关文章

  • 面试常问问题-中间件(flink)
    用处:处理流式数据1.写数据到hive(例如:埋点)2.转化数据,将二进制转化为客户端可识别的json(例如:业务层面)3.数据聚合(预警:例如访问次数,错误次数等用于判断风险阈值) 优点:1.高吞吐、低延迟、高性能兼具实时流式计算框架。2.支持高度容错的状态管理,防止状态在计算过程中因为系统异......
  • Flink用处及优点
    用处:处理流式数据1.写数据到hive(例如:埋点)2.转化数据,将二进制转化为客户端可识别的json(例如:业务层面)3.数据聚合(例如访问次数,错误次数等用于判断风险阈值) 优点:1.高吞吐、低延迟、高性能兼具实时流式计算框架。2.支持高度容错的状态管理,防止状态在计算过程中因为系统异常而......
  • 基于 Flink CDC 打造企业级实时数据集成方案
    基于FlinkCDC打造企业级实时数据集成方案本文整理自阿里云智能Flink数据通道负责人,FlinkCDC开源社区负责人,FlinkPMCMember&Committer徐榜江在2023云栖大会开源大数据专场的分享。本篇内容主要分为三部分:一、CDC数据实时集成的挑战二、FlinkCDC核心技术解读......
  • Flink生产问题记录
    1.集群有2个flink版本,用application方式启动报错Causedby:java.lang.ClassCastException:cannotassigninstanceoforg.apache.commons.collections.map.LinkedMaptofieldorg.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.pendingOffsetsToCommito......
  • Flink状态编程:为什么不建议在ValueState里面存Map?
    Flink状态编程:为什么不建议在ValueState里面存Map?文章目录先说结论性能:TTL:State需要存什么数据Heap模式ValueState和MapState如何存储StateBackend模式如何存储和读写State数据1.RocksDB模式ValueState和MapState如何存储1.1ValueState如何映射为RocksDB......
  • 【基础】Flink -- State 状态总结
    【基础】Flink--StateFlink--StateFlink中的状态有状态算子状态的分类按键分区状态KeyedState支持的结构类型值状态ValueState列表状态ListState映射状态MapState规约状态ReducingState聚合状态AggregatingState状态的生存时间算子状态OperatorState算子......
  • flink集群开放31607端口方法
    1、创建service-yaml[root@master-192-168-0-71service]#pwd/data01/datafocus/k8s/yaml/flink/service 内容如下: 2、创建servicekb create -f  jobmanager-service-np.yml    ......
  • GaussDB(DWS)基于Flink的实时数仓构建
    本文分享自华为云社区《GaussDB(DWS)基于Flink的实时数仓构建》,作者:胡辣汤。大数据时代,厂商对实时数据分析的诉求越来越强烈,数据分析时效从T+1时效趋向于T+0时效,为了给客户提供极速分析查询能力,华为云数仓GaussDB(DWS)基于流处理框架Flink实现了实时数仓构建。在本期《GaussDB(DW......
  • 实时数仓构建:Flink+OLAP查询的一些实践与思考
    今天是一篇架构分享内容。1.概述以Flink为主的计算引擎配合OLAP查询分析引擎组合进而构建实时数仓,其技术方案的选择是我们在技术选型过程中最常见的问题之一。也是很多公司和业务支持过程中会实实在在遇到的问题。很多人一提起实时数仓,就直接大谈特谈Hudi,Flink的流批一体等,但实......
  • MySQL的CDC数据实时同步
    MySQL的CDC数据实时同步 背景近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台。优先级比较高的一个任务就是需要近实时同步业务系统的数据(包括保存、更新或者软删除)到一个另一个数据源,持久化之前需要清洗数据并且构建一......