Flink CDC 3.0 详解

一、Flink CDC 概述

Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。

Flink CDC 于2023年12月7日重磅推出其全新的 3.0 版本,3.0版本的发布对 Flink CDC 而言具有里程碑的意义,自此 Flink CDC 从捕获数据变更的Flink 数据源正式迈向为以 Flink 为基础的端到端流式 ELT 数据集成框架。

在该版本中,社区首先支持实时同步MySQL数据至 Apache Doris 和 StarRocks两条链路。

二、Flink CDC 3.0 设计动机

2.1 Flink CDC与数据同步面临的挑战

虽然 Flink CDC 有很多技术优势,社区用户增长很快,但随着 Flink CDC 项目用户基数的日益增长,以及应用场景的不断扩大,社区收到了很多用户反馈:

  • 用户体验:只提供 Flink source,不支持端到端数据集成, SQL 和 DS API 构建作业流程复杂

  • 维护频繁:上游数据库表结构变更非常常见 ,增加、删除表的业务需求普遍存在

  • 扩展性:全量和增量阶段资源难以灵活扩缩容 ,千表同步、万表入湖入仓资源消耗大

  • 中立性:项目使用  Apache License V2 协议,不属于 Apache Flink ,版权归属于 Alibaba (Ververica)

针对这些反馈,社区的 Maintainer 也在思考在 Flink CDC 的不足,思考 CDC 乃至数据集成领域面临的技术挑战:

  • 历史数据规模大:数据库的历史数据规模大,100T+ 规模很常见

  • 增量数据实时性要求高:数据库的增量数据业务价值高,且价值随时间递减,需要实时处理

  • 数据的保序性:CDC 数据的加工结果通常需要强一致性语义,需要处理工具支持全局保序

  • 表结构动态变化:增量数据随时间增长,数据对应的表结构会不断演进

在梳理这些问题时,我们也在思考,能否在 Flink CDC 项目中帮助用户解决这些技术挑战?能否为用户打磨一款面向 CDC 和海量数据集成的开源产品?

2.2 Flink CDC 3.0 定位

针对这些想法,我们在Flink CDC社区里面与Maintainer一起展开了多轮讨论和设计。最终,面向数据集成用户、面向端到端实时数据集成的框架 Flink CDC 3.0 应运而生。在产品设计上我们追求简洁,秉持以下原则和目标进行设计:

  • 端到端体验:Flin

### 配置和使用 Flink CDC 3.0 与 RDS 数据源 #### 关于 Flink CDC 版本演进 Flink CDC 的发展经历了多个版本,在早期版本中,为了确保数据的一致性,默认情况下会采用全局锁机制来处理变更数据捕获过程中的事务隔离问题[^1]。然而这种做法可能会带来性能上的瓶颈以及潜在的应用hang住风险。随着技术的进步,Flink CDC 2.0引入了新的设计思路,特别是针对MySQL这类关系型数据库的支持进行了优化改进[^2]。 对于最新版即Flink CDC 3.0而言,其进一步增强了对多种主流云服务提供商所托管的关系型数据库(如AWS RDS)的支持能力,并且通过一系列技术创新实现了更高效稳定的数据同步体验。 #### 如何配置 Flink CDC 3.0 和 AWS RDS MySQL 实例连接 要实现这一目标,需遵循如下指南: - **环境准备** - 确认已安装并配置好 Apache Flink 环境。 - 下载适用于特定版本的 `flink-sql-connector` JAR 文件,可以从官方GitHub仓库获取对应版本资源文件[^3]。 - **创建 Debezium Connector JSON 配置** ```json { "name": "rds-mysql-source", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "database.hostname": "<your-rds-endpoint>", "database.port": "3306", "database.user": "<db-user>", "database.password": "<db-password>", "database.server.id": "184054", "database.include.list": "<target-database-name>", "table.whitelist": "<schema>.<tablename>", "database.history.kafka.bootstrap.servers": "localhost:9092", "database.history.kafka.topic": "history-topic" } } ``` 请注意替换 `<...>` 占位符为实际参数值。 - **启动 Flink SQL Client 并加载必要的依赖库** ```bash ./bin/sql-client.sh embedded -j /path/to/flink-sql-connector-flink-cdc-x.x.x.jar ``` 这里 `/path/to/` 应指向下载好的JAR包路径;而 `-j` 参数用于指定外部插件的位置。 - **定义输入表结构并通过 DDL 创建逻辑视图** ```sql CREATE TABLE rds_mysql_table ( id BIGINT, name STRING, age INT, ts TIMESTAMP(3), WATERMARK FOR ts AS ts - INTERVAL &#39;5&#39; SECOND ) WITH ( &#39;connector&#39; = &#39;mysql-cdc&#39;, &#39;hostname&#39; = &#39;<your-rds-endpoint>&#39;, &#39;port&#39; = &#39;3306&#39;, &#39;username&#39; = &#39;<db-user>&#39;, &#39;password&#39; = &#39;<db-password>&#39;, &#39;database-name&#39; = &#39;<target-database-name>&#39;, &#39;table-name&#39; = &#39;<schema>.<tablename>&#39; ); ``` 以上SQL语句展示了如何基于之前设置好的Debezium connector配置信息构建一个名为 `rds_mysql_table` 的虚拟表格对象,它可以直接参与到后续ETL流程当中去。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值