一文入门Dataphin实时集成

本文涉及的产品
智能数据建设与治理Dataphin,200数据处理单元
简介: Dataphin实时集成的读取和写入原理是什么?Dataphin实时集成和实时研发的区别是什么?Dataphin实时集成有哪些优势?本文一次讲清


实时集成采集-Flink CDC

概念

Flink CDC(Change Data Capture)是一个基于Apache Flink构建的开源库,通过与数据库交互并读取其变更日志(例如MySQL的binlog或Oracle的Redo Log)来获取数据变化事件,然后将这些事件转换成Flink内部可处理的Changelog流格式,后续利用Flink强大的状态管理和流处理能力,对变更数据进行实时分析、聚合或者传输至目标存储系统如Hadoop HDFS、Kafka或其他数据库等。

数据库变更日志和Changelog流

数据库的变更日志(Change Log)和Changelog流都是用于记录数据库状态变化的数据结构

  1. 数据库变更日志:

数据库变更日志是数据库系统内用来记录所有对数据进行修改操作的日志文件或机制,是数据库本身维护的用于保证数据完整性和提供恢复能力的底层技术实现。例如:

  • MySQL的二进制日志(Binary Log):它记录了所有的DDL(数据定义语言)和DML(数据操作语言)操作,如INSERT、UPDATE、DELETE等,这些操作按照事务提交的顺序排列。
  • Oracle的Redo Log:用于保存事务对数据库所做的更改信息,以支持事务的回滚和数据库的恢复。
  • PostgreSQL的WAL(Write-Ahead Log):在事务提交前先将变更写入日志,确保在系统崩溃时能够恢复到一致的状态。
  • Changelog流:

Apache Flink中的Changelog流是一种特殊的事件流,是从变更日志中提取出来,适合于流处理框架使用的、描述数据变更过程的数据流形式。每个事件包含了关于某个数据对象(如数据库表的一行记录)状态变更的具体信息,如添加、更新或删除的动作类型,以及变更后的数据内容。

  1. 举个例子:

假设我们有一个电商数据库,其中包含一个orders表,记录了所有的订单信息。现在发生了以下操作:

  1. 数据库变更日志:
  • 插入操作:当用户A下单后,数据库会执行一条INSERT语句,向orders表中插入一行新数据(例如:订单ID=1001,用户ID=A,商品ID=1,数量=2)。
  • 更新操作:假设用户A修改了订单1001的商品数量,从2个变为3个。数据库会执行一条UPDATE语句,更新orders表中的相应记录。
  • INSERT操作和UPDATE操作会被数据库的变更日志记录下来,如MySQL的二进制日志可能记录为:
INSERT INTO orders (order_id, user_id, product_id, quantity) VALUES (1001, 'A', 1, 2);
UPDATE orders SET quantity = 3 WHERE order_id = 1001;
  • 如果之后用户A取消订单并执行了一条DELETE语句,该操作也会被记录到变更日志中。
  • Changelog流:
  • 当使用Apache Flink CDC等工具捕获上述数据库变更日志时,会将其转换为Changelog流的形式:在这里,Changelog流以事件形式表示了数据库中的变化,每个事件包含了操作类型(INSERT、UPDATE、DELETE)以及对应的数据内容。
+ INSERT: Order(order_id=1001, user_id='A', product_id=1, quantity=2)
+ UPDATE_BEFORE: Order(order_id=1001, user_id='A', product_id=1, quantity=2)
+ UPDATE_AFTER: Order(order_id=1001, user_id='A', product_id=1, quantity=3)
+ DELETE: Order(order_id=1001, user_id='A', product_id=1, quantity=3)

Flink增量读取和全量读取

增量读取:单并发,关系型数据库是单机,多并发无意义

全量读取:多并发,否则同步速率慢,读不过来

Flink实现全量读取数据的方式通常不依赖于数据库的Redo Log或Binlog日志,而是直接从数据源(如数据库、文件系统或其他数据存储)中一次性加载所有符合查询条件的数据,并将其转换为DataStream或Table,然后进一步进行流式或批量处理。

目前实时集成仅支持增量读取,全量读取可通过离线集成实现

实时集成写入

对采集到的Changelog流进行处理,通过对应的connector进行写入

JDBC写入关系型数据库:Changelog流根据关系型数据库的特性,如字段类型、约束条件等,转换处理为合理的数据

写入大数据存储、消息队列:Changelog流转换为Append流写入

通过jdbc connector写入Mysql、Oracle 通过对应的connector写入odps、Hive 通过 kafka connector写入Kafka

结果表没有主键

结果表有主键

Changelog流消息类型

insert

处理为insert

处理为upsert

处理为insert,标记操作类型insert

处理为insert,标记操作类型insert

update_before

直接丢弃

直接丢弃

直接丢弃

直接丢弃

update_after

处理为insert

处理为upsert

处理为insert,标记操作类型update

处理为insert,标记操作类型update

delete

直接丢弃

处理为delete

处理为insert,标记操作类型delete

处理为insert,标记操作类型delete

目标表

需要映射目标表

写入同一个topic中,数据会带有表名字段

DDL处理

正常处理/忽略/报错

全部写入,无法忽略/报错

用户可以自行处理得到的结果表,按主键聚合,按更新时间进行排序,根据最新的操作类型执行


实时集成与实时研发对比

实时研发

实时集成

配置方法

写flink sql/flink datastream代码

配置化操作,无需手写代码

实时采集支持的数据源

多种,实现方式包含Flink CDC(MySQL)、定时查表(SAP)、直接读取(Kafka)等

目前仅支持Flink CDC采集

同步表量

一个任务同步的表量由代码决定,每张表需要单独的ddl定义(开源的connector仅支持单表处理,flink datastream支持,代码编写难度大)

一个任务可支持整库同步,可圈选或排除某些表

(实时集成是在开源的connector基础上进行改造)

是否有改造引擎?

数据处理

数据处理能力较灵活,可以自行编写数据处理和计算代码

数据处理能力较弱

场景

同步表数量较少,需要进行数据处理

同步表数量较多且不需要进行数据处理

实时集成工具对比

实时数据采集工具

厂家

特点

OGG

Oracle原厂的Oracle采集和同步工具

价格昂贵

性能高

只支持Oracle实时数据同步

Dataphin实时集成

Dataphin自研的 CDC Connector

配置化方式,无需写代码

支持整库或多表同步

支持多种数据源

性能优于开源Flink CDC

开源Flink CDC(可搭配Dataphin实时研发)

开源免费的Flink CDC

需要写Flink SQL代码

只支持单表数据同步

总结-性能/价格:OGG > Dataphin实时集成 >> 开源Flink CDC





相关文章
|
1月前
|
测试技术 数据处理 调度
Dataphin功能Tips系列(57)「预览」vs「运行」:离线集成的神奇按钮
在数据开发过程中,使用Dataphin处理离线集成任务时,可能遇到数据过滤和字段计算组件配置正确性的验证问题。通过「预览」功能,可快速验证处理逻辑而不影响目标表;对于需要调度的任务,担心资源占用和耗时超出预期时,可使用「运行」功能进行全流程测试,评估实际耗时与资源消耗。「预览」适合逻辑验证,「运行」用于真实环境模拟,两者结合助力高效开发与调试。
|
1月前
|
SQL Java 关系型数据库
Dataphin功能Tips系列(53)-离线集成任务如何合理配置JVM资源
本文探讨了将MySQL数据同步至Hive时出现OOM问题的解决方案。
|
25天前
|
运维 监控
Dataphin V5.0:增全量一体实时集成
数据集成中,离线与实时方式各有优劣。为解决传统“全量+增量”双轨模式运维复杂的问题,Dataphin 5.0推出“全量+增量一体化实时同步”功能。用户仅需创建一个实时任务,即可完成整库或多表的数据迁移,系统自动协调全量与增量同步,简化管理并降低运维成本。该功能支持灵活配置启动范围与方式,提供实时监控及操作能力,大幅提升数据同步效率与稳定性。
114 41
|
1月前
|
存储 分布式计算 供应链
Dataphin功能Tips系列(51)-支持增全量一体实时集成
本文介绍了基于增全量一体实时集成的库存管理与分析解决方案。通过将业务中台的库存表同步至MaxCompute Delta表,实现离线与实时分析的统一支持。相比传统方案,该方法确保数据一致性,优化存储成本,降低维护复杂度,并大幅提升实时性,满足高效库存管理需求。
|
3月前
|
关系型数据库 MySQL 数据库
|
3月前
|
SQL 分布式计算 关系型数据库
|
6月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
149 3
|
8月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
7月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
246 0
|
11月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
469 6

热门文章

最新文章