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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 本文源自阿里云实时计算团队 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

相关文章
|
2月前
|
数据采集 SQL canal
Amoro + Flink CDC 数据融合入湖新体验
本文总结了货拉拉高级大数据开发工程师陈政羽在Flink Forward Asia 2024上的分享,聚焦Flink CDC在货拉拉的应用与优化。内容涵盖CDC应用现状、数据入湖新体验、入湖优化及未来规划。文中详细分析了CDC在多业务场景中的实践,包括数据采集平台化、稳定性建设,以及面临的文件碎片化、Schema演进等挑战。同时介绍了基于Apache Amoro的湖仓融合架构,通过自优化服务解决小文件问题,提升数据新鲜度与读写平衡。未来将深化Paimon与Amoro的结合,打造更高效的入湖生态与自动化优化方案。
150 1
Amoro + Flink CDC 数据融合入湖新体验
|
2月前
|
SQL 关系型数据库 MySQL
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
Apache Flink CDC 3.4.0 版本正式发布!经过4个月的开发,此版本强化了对高频表结构变更的支持,新增 batch 执行模式和 Apache Iceberg Sink 连接器,可将数据库数据全增量实时写入 Iceberg 数据湖。51位贡献者完成了259次代码提交,优化了 MySQL、MongoDB 等连接器,并修复多个缺陷。未来 3.5 版本将聚焦脏数据处理、数据限流等能力及 AI 生态对接。欢迎下载体验并提出反馈!
430 1
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
|
3月前
|
SQL API Apache
Dinky 和 Flink CDC 在实时整库同步的探索之路
本次分享围绕 Dinky 的整库同步技术演进,从传统数据集成方案的痛点出发,探讨了 Flink CDC Yaml 作业的探索历程。内容分为三个部分:起源、探索、未来。在起源部分,分析了传统数据集成方案中全量与增量割裂、时效性低等问题,引出 Flink CDC 的优势;探索部分详细对比了 Dinky CDC Source 和 Flink CDC Pipeline 的架构与能力,深入讲解了 YAML 作业的细节,如模式演变、数据转换等;未来部分则展望了 Dinky 对 Flink CDC 的支持与优化方向,包括 Pipeline 转换功能、Transform 扩展及实时湖仓治理等。
519 12
Dinky 和 Flink CDC 在实时整库同步的探索之路
|
1月前
|
消息中间件 SQL 关系型数据库
Flink CDC + Kafka 加速业务实时化
Flink CDC 是一种支持流批一体的分布式数据集成工具,通过 YAML 配置实现数据传输过程中的路由与转换操作。它已从单一数据源的 CDC 数据流发展为完整的数据同步解决方案,支持 MySQL、Kafka 等多种数据源和目标端(如 Delta Lake、Iceberg)。其核心功能包括多样化数据输入链路、Schema Evolution、Transform 和 Routing 模块,以及丰富的监控指标。相比传统 SQL 和 DataStream 作业,Flink CDC 提供更灵活的 Schema 变更控制和原始 binlog 同步能力。
|
2月前
|
移动开发 Java 测试技术
HarmonyOS NEXT~鸿蒙系统与mPaaS三方框架集成指南
本文详细介绍了鸿蒙系统(HarmonyOS)与mPaaS框架的集成方法。鸿蒙系统作为华为开发的分布式操作系统,具备分布式架构、微内核设计等特性;mPaaS是蚂蚁金服推出的移动开发平台,提供金融级组件和全生命周期管理能力。文章从环境准备、核心功能集成(如初始化、用户认证、支付功能)、适配问题解决到调试测试及最佳实践,全方位指导开发者高效集成两者。通过遵循指南,可充分利用鸿蒙的特性和mPaaS的金融能力,构建高性能、高安全性的应用,同时避免常见兼容性问题,缩短开发周期。
128 0
|
4月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
4月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
701 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
4月前
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
421 1
Flink CDC + Hologres高性能数据同步优化实践
|
4月前
|
分布式计算 关系型数据库 MySQL
Flink CDC 3.3.0 发布公告
Flink CDC 3.3.0 发布公告
183 14
|
4月前
|
SQL 弹性计算 DataWorks
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
178 6

相关产品

  • 实时计算 Flink版