您的位置:首页 > 文旅 > 旅游 > 实时捕获数据库变更

实时捕获数据库变更

2024/12/23 16:41:16 来源:https://blog.csdn.net/iOceanMind/article/details/140716183  浏览:    关键词:实时捕获数据库变更

1.CDC概述

CDC 的全称是 Change Data Capture ,在广义的概念上,只要能捕获数据变更的技术,我们都可以称为 CDC 。我们目前通常描述的CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术,CDC 技术应用场景非常广泛:

  1. 数据同步,用于备份,容灾
  2. 数据分发,一个数据源分发给多个下游系统
  3. 数据采集,面向数据仓库/数据湖的 ETL 数据集成,是非常重要的数据源

2.常用的CDC工具对比

3.CDC实现方案Kafka Connect + Flink

3.1系统架构

在该场景下,由于 CDC 变更记录会暂存到 Kafka 一段时间,因此可以在这期间任意启动/重启 Flink 作业进行消费;也可以部署多个 Flink 作业对这些数据同时处理并写到不同的数据目的(Sink)库表中,实现了 Source 变动与 Sink 的解耦。

3.2优缺点分析

优点:

  1. 数据采集和数据消费通过kafka解耦

缺点:

  1. 不支持表结构变更同步
  2. 需额外部署kafka connect工具,采集源端变更数据
  3. 数据链路太长,变更的数据到下游有一定的延迟

3.3Debezium版本选择

Debezium 1.5.3.Final支持的数据库有:MySQL、MongoDB、PostgreSQL、Oracle、SQL Server、Db2。 PS:高版本的debezium使用的是openjdk11。

3.4Flink版本选择

Flink版本与cdc相关的特性列表:

Flink版本

CDC特性

Flink1.10

不支持

Flink1.11

支持debezium-json和canal-json(mysql)

Flink1.12

支持maxwell-json(mysql)

支持debezium-avro-confluent

Flink1.13+

未变化

PS: debezium-avro-confluent格式依赖的jar是flink-avro-confluent-registry

其他格式依赖的jar是flink-json (Flink 内置)

4.CDC实现方案​​​​​​​Flink CDC Connectors

Flink CDC Connectors 是一组用于 Apache Flink 的源连接器,使用变更数据捕获 (CDC) 从不同的数据库中获取变更。 Flink CDC 连接器集成了 Debezium 作为引擎来捕获数据变化。所以它可以充分发挥 Debezium 的能力。

4.1系统架构​​​​​​​

----Table/SQL API 示例----

----DataStream API 示例----

​​​​​​​4.2优缺点分析

Table/SQL API的方式

优点:

  1. 使用SQL方式,易于使用,且支持多表联合进行数据处理

缺点:

  1. 不支持表结构变更同步
  2. 每张CDC表都内嵌了debezium采集器,对源业务系统影响较大

DataStream API的方式

优点:

  1. 一个source可以同步多表数据

缺点:

  1. 不支持表结构变更同步
  2. 需开发数据落地算子,将devezium-json格式的数据解析后,分别写入目标表中

​​​​​​​​​​​​​​4.3支持的数据源

4.4支持的Flink版本

5.CDC实现方案—OceanMind

基于以上方案的优缺点分析,OceanMind在Flink CDC路线基础上进行了技术创新,通过新建实时任务,进行可视化的算子拖拽配置,即可生成定制的flink cdc流程。此方式降低了使用门槛,可快速满足业务部门的实时数据捕获使用需求,提升工作效率。

5.1系统架构
​​​​​​​

5.2使用示例

5.3方案对比分析

OceanMind集成Flink CDC

Flink CDC Table/SQL

Flink CDC DataStream

Kafka Connect + Flink

全量+增量

资源消耗

★★★

★★

★★★★

对源端系统影响

★★★

处理效率

★★★★

★★★★

★★★

★★★

支持SQL处理

X

X

变更数据延迟

★★★

易用性

★★★★★

★★★★

★★

★★

5.4方案创新点

  1. 新增元数据op_type字段,记录操作标识
  2. 落地算子新增Append模式,将历史变更数据全部记录下来,用于历史溯源
  3. 解决Oracle 全量同步阶段切片不均匀问题
  4. 解决PostgreSQL CDC不支持中文库表名

5.5支持的数据源

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com