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

相关文章
|
9天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
5天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2491 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
5天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1510 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19280 30
|
7天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
463 11
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18829 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17521 13
Apache Paimon V0.9最新进展
|
1月前
|
存储 人工智能 前端开发
AI 网关零代码解决 AI 幻觉问题
本文主要介绍了 AI Agent 的背景,概念,探讨了 AI Agent 网关插件的使用方法,效果以及实现原理。
18699 16
|
4天前
|
SQL 监控 druid
Druid连接池学习
Druid学习笔记,使用Druid进行密码加密。参考文档:https://github.com/alibaba/druid
204 82
|
7天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
422 46
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界