Flink CDC:新一代实时数据集成框架

简介: 本文源自阿里云实时计算团队 Apache Flink Committer 任庆盛在 Apache Asia CommunityOverCode 2024 的分享,涵盖 Flink CDC 的概念、版本历程、内部实现及社区未来规划。Flink CDC 是一种基于数据库日志的 CDC 技术实现的数据集成框架,能高效完成全量和增量数据的实时同步。自 2020 年以来,Flink CDC 经过多次迭代,已成为功能强大的实时数据集成工具,支持多种数据库和数据湖仓系统。未来将进一步扩展生态并提升稳定性。

摘要:本文整理自阿里云实时计算团队 Apache Flink Committer 和 PMC Member 任庆盛老师在 Apache Asia CommunityOverCode 2024中的分享。内容主要分为以下四个部分:

  1. 什么是 Flink CDC
  2. Flink CDC 版本历程
  3. Flink CDC 内部实现
  4. Flink CDC 社区与未来规划

一、什么是 Flink CDC

Flink CDC 是一个数据集成框架,它基于数据库日志的 CDC(变更数据捕获)技术实现了统一的增量和全量数据读取。结合 Flink 出色的管道能力和丰富的上下游生态系统,Flink CDC 可以高效地实现海量数据的实时集成。

(1)Flink CDC 使用场景

Flink CDC 可以应用在多种场景中。比如数据同步,可以将上游数据库中的数据同步至下游数据仓库、数据湖等。用户还可以借助 Flink CDC source 实现实时物化视图,结合下游 Flink 作业处理逻辑实现更丰富的业务场景。此外用户还可以使用 Flink CDC 捕获的变更数据基于业务逻辑进行数据分发。

作为一款数据集成框架,Flink CDC 对接了非常丰富的上下游数据库、数据湖仓和消息队列等外部系统,如 MySQL、PostgreSQL、Kafka、Paimon 等。

(2)与传统数据集成流水线比较

一个传统的数据集成流水线通常由两套系统构成:全量同步和增量同步。其中全量同步会使用 DataX、Sqoop 等系统,增量同步需要使用另外一套系统,如 Debezium、Canal 等等。在全量同步完成后,可能还需要额外的一步合并操作将增量表和全量表进行合并,最终得到与上游一致的快照。这种架构的组件构成较为复杂,为系统维护带来了很多困难。

相比于传统数据集成流水线,Flink CDC 提供了全量和增量一体化同步的解决方案,对于一个同步任务,只需使用一个 Flink 作业即可将上游的全量数据和增量数据一致地同步到下游系统。此外 Flink CDC 使用了增量快照算法,无需任何额外配置即可实现全量和增量数据的无缝切换。

二、Flink CDC 版本历程

Flink CDC 诞生于 2020 年 7 月,中间经过不断迭代优化,发布了多个大版本。2021 年 8 月,Flink CDC 发布了 2.0 版本,首次为 MySQL CDC source 引入增量快照算法,实现了全增量同步无缝切换。2022 年 11 月,Flink CDC 发布 2.3 版本,将大多数 connector 对接至增量快照框架。2023 年 12 月,Flink CDC 推出 3.0 版本,正式将 Flink CDC 项目升级为实时数据集成框架,提供 YAML API,为数据同步提供端到端解决方案。

三、Flink CDC 内部实现

(1)Flink CDC YAML

在 Flink CDC 2.x 的时代,Flink CDC 只提供一些 Flink source,用户仍然需要自己开发 Flink DataStream 或 SQL 作业实现数据同步逻辑。如果用户对 Flink 不够熟悉,经常会遇到棘手的数据正确性和乱序问题。此外 Flink CDC 2.x 不支持 schema 变更,而 schema 变更是用户的业务系统中很常见而且很重要的场景。通过对用户使用场景的调研,我们发现绝大多数使用 Flink CDC 的作业都是较为简单的数据 ETL。结合上述问题,我们决定为用户提供一个全新的框架,设计一套全新的 API,专注于数据同步场景。

(2)Flink CDC 整体设计

Flink CDC 基于 Flink runtime 实现,因此可以充分复用 Flink 的资源管理和在不同环境上部署的能力。针对各种数据集成场景,Flink CDC 深度定制了多种自定义算子,如 schema operator、router、transformer 等。为了将不同的算子进行协调和组合,Flink CDC 引入了 composer 组件,可根据用户定义的数据同步逻辑构建 Flink 作业。依托于 Flink 丰富的生态系统,开发者只需简单地封装即可快速将现有的 Flink connector 对接至 Flink CDC。此外 Flink 还提供了 CLI,只需一个脚本即可将用户的 YAML 定义使用 composer 构建成 Flink 作业,并提交至指定 Flink 集群。基于以上架构,Flink CDC 为数据集成用户提供 schema 变更同步、整库同步、分库分表同步等增强能力。

(3)Flink CDC API

Flink CDC API 使用 YAML 语法定义数据同步任务,即易于开发者进行手动开发,又可以高效地使用机器进行处理。YAML API 针对数据集成场景设计,用户只需定义同步数据源和数据目标端即可快速搭建起一个实时同步流水线。此外用户还可以在 YAML 中定义 routing 和 transformation 实现自定义数据分发和变换。用户不再需要熟练掌握 Flink 作业开发与内部实现,即可使用 Flink CDC 搭建实时数据集成流水线。

Flink CDC 提供的 CLI(flink-cdc.sh)进一步简化了用户提交 Flink CDC 任务的流程。用户只需执行一行命令,CDC composer 会将 source、sink、自定义 CDC runtime 构建成 Flink 任务,创建 Flink JobGraph 后提交至 Flink 集群。

(4)Flink CDC Pipeline 连接器

Flink CDC 定义了自己的数据源和目标端连接器的接口,以适配 Flink CDC 内部的数据结构。Flink CDC pipeline connector 基于 Flink connector,只需进行简单的数据转换封装,即可快速复用现有的 Flink connector,将其对接到 Flink CDC 生态系统中。为了实现 schema 变更处理能力,Flink CDC 定义了 MetadataAccessor 和 MetadataApplier,分别对源端和目标端的 schema 等元信息进行获取和处理,实现 schema 变更的实时同步。

(5)Flink CDC Source 增量快照算法

为了实现全量和增量的一体化同步,Flink CDC source 使用增量快照算法,既实现了全增量同步的无缝切换,而且采用了无锁设计,避免全量同步时的锁表动作对上游业务的影响。在增量快照算法中,数据库的全量数据被切分为独立的数据块(chunk),分发给 source 的各个并发进行读取。考虑到在全量读取过程中数据还有可能发生变化,在开始读取前,source 将 binlog 的当前位点记为低水位线(low watermark),在全量读取结束后再次将 binlog 最新位点记录为高水位线(high watermark),随后读取高、低水位线之间的变更数据,将其合并到已读取的全量数据块中,从而构建一个与上游完全一致的数据块。在完成全部数据块的读取之后,source 会根据记录的高水位线确定切换位点,实现全量和增量的无缝切换。

(6)Flink CDC 对 Schema 变更的支持

Flink CDC 通过定制化的 schema operator 以及 schema registry 的协调,实现对上游 schema 变更的实时同步。当 schema operator 感知到上游发生 schema 变更后,会将变更信息同步给 schema registry,并暂停数据流的处理。schema registry 首先插入 Flush 事件将下游数据全部从 sink 推出,在收到全部 sink 的确认后,通过 MetadataApplier 将 schema 变更应用在下游系统中,在完成 schema 变更后,schema registry 通知 schema operator,并恢复数据流处理,完成整个 schema 变更的流程。

(7)Flink CDC 对数据分发处理的支持

Flink CDC 定制了 router 算子,实现对变更数据的分发和合并。用户可以在 YAML 中使用 route 字段修改变更数据的目标数据库和表名,将数据同步至指定目标端,同样也可以通过指定多对一的路由规则,将多个表合并为目标端中的一张表。

(8)Flink CDC 对数据变换的支持

通过在 YAML 中使用 transform 字段,用户可以在数据流上定义投影、过滤、增加元信息列等数据变换操作,调整数据内容后同步至下游。transform 使用类 SQL 语法,既可以让用户简单上手开发,又保留了对更多类型变换支持的可扩展性。

(9)Flink CDC 数据结构

Flink CDC 在数据流中定义了数据和 schema 信息的协议:

  • 数据流以 CreateTableEvent 开始来描述起始 schema

  • 后续所有的 DataChangeEvent 需要遵循其前方的 schema

  • 当 schema 发生变更时,需要在数据流中发送一个新的 SchemaChangeEvent 以描述 schema 变化

这种设计的优势在于实现了数据和 schema 的分离,大大降低了数据的序列化成本。此外 Flink CDC 为数据变更事件使用了压缩的二进制格式,进一步提升了性能。

四、Flink CDC 社区与未来规划

目前 Flink CDC 已经有超过 160 位贡献者,项目获得 5k+ star,1000+ commit。未来 Flink CDC 将着力于扩展生态,对接至更多的外部系统,如 PostgreSQL、Iceberg 等,并且将支持更多的 schema 变更类型和数据类型。另外 Flink CDC 也会持续提升生产稳定性,包括对异常处理方式进行自定义配置、提升测试覆盖等等。作为 Apache Flink 的子项目,Flink CDC 使用与 Flink 一致的贡献流程。欢迎各位用户和贡献者在 Flink 邮件列表中咨询和讨论,使用 Apache JIRA 创建 issue,在 GitHub 上提交 PR!

欢迎大家多多关注 Flink CDC,从钉钉用户交流群[1]、微信公众号[2]、Slack 频道[3]、邮件列表[4]加入 CDC 用户社区,以及在 Flink CDC GitHub 仓库[5]上参与代码贡献!


[1] “ Flink CDC 社区 ② 群”群的钉钉群号:80655011780

[2] ” Flink CDC 公众号“的微信号:ApacheFlinkCDC

[3] https://flink.apache.org/what-is-flink/community/#slack

[4] https://flink.apache.org/what-is-flink/community/#mailing-lists

[5] https://github.com/apache/flink-cdc


更多内容

img


活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算 Flink 版现开启活动:
新用户复制点击下方链接或者扫描二维码即可0元免费试用 Flink + Paimon
实时计算 Flink 版(3000CU*小时,3 个月内)
了解活动详情:https://free.aliyun.com/?utm_content=g_1000395379&productCode=sc

retouch_2024070417440476.jpg

相关文章
|
4月前
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
1496 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
|
10月前
|
消息中间件 关系型数据库 MySQL
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
1048 0
|
8月前
|
移动开发 Java 测试技术
HarmonyOS NEXT~鸿蒙系统与mPaaS三方框架集成指南
本文详细介绍了鸿蒙系统(HarmonyOS)与mPaaS框架的集成方法。鸿蒙系统作为华为开发的分布式操作系统,具备分布式架构、微内核设计等特性;mPaaS是蚂蚁金服推出的移动开发平台,提供金融级组件和全生命周期管理能力。文章从环境准备、核心功能集成(如初始化、用户认证、支付功能)、适配问题解决到调试测试及最佳实践,全方位指导开发者高效集成两者。通过遵循指南,可充分利用鸿蒙的特性和mPaaS的金融能力,构建高性能、高安全性的应用,同时避免常见兼容性问题,缩短开发周期。
440 0
|
10月前
|
SQL 弹性计算 DataWorks
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
495 6
|
10月前
|
SQL 人工智能 关系型数据库
Flink CDC YAML:面向数据集成的 API 设计
Flink CDC YAML:面向数据集成的 API 设计
434 5
|
数据采集 DataWorks 监控
DataWorks产品使用合集之数据集成并发数不支持批量修改,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
200 0
|
10月前
|
DataWorks 关系型数据库 Serverless
DataWorks数据集成同步至Hologres能力介绍
本文由DataWorks PD王喆分享,介绍DataWorks数据集成同步至Hologres的能力。DataWorks提供低成本、高效率的全场景数据同步方案,支持离线与实时同步。通过Serverless资源组,实现灵活付费与动态扩缩容,提升隔离性和安全性。文章还详细演示了MySQL和ClickHouse整库同步至Hologres的过程。
|
12月前
|
DataWorks 关系型数据库 Serverless
DataWorks数据集成同步至Hologres能力介绍
本次分享的主题是DataWorks数据集成同步至Hologres能力,由计算平台的产品经理喆别(王喆)分享。介绍DataWorks将数据集成并同步到Hologres的能力。DataWorks数据集成是一款低成本、高效率、全场景覆盖的产品。当我们面向数据库级别,向Hologres进行同步时,能够实现简单且快速的同步设置。目前仅需配置一个任务,就能迅速地将一个数据库实例内的所有库表一并传输到Hologres中。
279 12
|
数据采集 DataWorks 数据管理
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第10天】随着大数据技术的发展,企业对数据处理的需求日益增长。阿里云推出的DataWorks是一款强大的数据集成和管理平台,提供从数据采集、清洗、加工到应用的一站式解决方案。本文通过电商平台案例,详细介绍了DataWorks的核心功能和优势,展示了如何高效处理大规模数据,帮助企业挖掘数据价值。
396 1
|
数据采集 SQL DataWorks
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第5天】本文通过一家电商平台的案例,详细介绍了阿里云DataWorks在数据处理全流程中的应用。从多源数据采集、清洗加工到分析可视化,DataWorks提供了强大的一站式解决方案,显著提升了数据分析效率和质量。通过具体SQL示例,展示了如何构建高效的数据处理流程,突显了DataWorks相较于传统工具如Excel的优势,为企业决策提供了有力支持。
413 3

相关产品

  • 实时计算 Flink版