公众号更名公告
「Flink 中文社区」更名为「Apache Flink」
感谢你们的关注
前言

Flink-CDC 项目地址:
https://github.com/ververica/flink-cdc-connectors
一、Flink CDC 2.1 概览
https://github.com/ververica/flink-cdc-connectors/releases/tag/release-2.1.0
本文带着你 10 分钟了解 Flink CDC 2.1 版本的重大改进和核心功能。2.1 版本包含 23 位贡献者贡献的 100+ PR,重点提升了 MySQL CDC 连接器的性能和生产稳定性,重磅推出 Oracle CDC 连接器和 MongoDB CDC 连接器。
MySQL CDC 支持百亿级数据的超大表,支持 MySQL 全部数据类型,通过连接池复用等优化大幅提升稳定性。同时提供支持无锁算法,并发读取的 DataStream API,用户可以借此搭建整库同步链路; 新增了 Oracle CDC 连接器, 支持从 Oracle 数据库获取全量历史数据和增量变更数据; 新增了 MongoDB CDC 连接器,支持从 MongoDB 数据库获取全量历史数据和增量变更数据; 所有连接器均支持了 metadata column 功能, 用户通过 SQL 就可以访问库名,表名,数据变更时间等 meta 信息,这对分库分表场景的数据集成非常实用; 丰富 Flink CDC 入门文档,增加多种场景的端到端实践教程。
二、MySQL CDC 连接器改进详解
1. 稳定性提升
针对不同的主键分布,引入动态分片算法 对主键是非数值、Snowflake ID、稀疏主键、联合主键等场景,通过动态分析源表的主键分布的均匀程度,根据分布的均匀程度自动地计算分片大小,让切片更加合理,让分片计算更快。动态分片算法能够很好地解决稀疏主键场景下分片过多的,联合主键场景下分片过大等问题,让每个分片包含的行数尽量维持在用户指定的 chunk size,这样用户通过 chunk size 就能控制分片大小和分片数量,无需关心主键类型。
支持百亿级超大规模表 在表规模非常大时,以前会报 binlog 分片下发失败的错误,这是因为在超大表对应的 snapshot 分片会非常多,而 binlog 分片需要包含所有 snapshot 分片信息,当 SourceCoordinator 下发 binglog 分片到 SourceReader 节点时,分片 size 超过 RPC 通信框架支持的最大 size 会导致分片下发失败。虽然可以通过修改 RPC 框架的参数缓解分片 size 过大问题,但无法彻底解决。2.1 版本里通过将多个 snapshot 分片信息划分成 group 发送,一个 binlog 分片会切分成多个 group 逐个发送,从而彻底解决该问题。
引入连接池管理数据库连接,提升稳定性 通过引入连接池管理数据库连接,一方面降低了数据库连接数,另外也避免了极端场景导致的连接泄露。
支持分库分表 schema 不一致时,缺失字段自动填充 NULL 值
2. 功能增强
支持所有 MySQL 数据类型 包括枚举类型、数组类型、地理信息类型等复杂类型。
支持 metadata column 用户可以在 Flink DDL 中通过 db_name STRING METADATA FROM 'database_name' 的方式来访问库名(database_name)、表名(table_name)、变更时间(op_ts)等 meta 信息。这对分库分表场景的数据集成非常使用。
支持并发读取的 DataStream API 在 2.0 版本中,无锁算法,并发读取等功能只在 SQL API 上透出给用户,而 DataStream API 未透出给用户,2.1 版本支持了 DataStream API,可通过 MySqlSourceBuilder 创建数据源。用户可以同时捕获多表数据,借此搭建整库同步链路。同时通过 MySqlSourceBuilder#includeSchemaChanges 还能捕获 schema 变更。
支持 currentFetchEventTimeLag,currentEmitEventTimeLag,sourceIdleTime 监控指标 这些指标遵循 FLIP-33 [1] 的连接器指标规范,可以查看 FLIP-33 获取每个指标的含义。其中,currentEmitEventTimeLag 指标记录的是 Source 发送一条记录到下游节点的时间点和该记录在 DB 里产生时间点差值,用于衡量数据从 DB 产生到离开 Source 节点的延迟。用户可以通过该指标判断 source 是否进入了 binlog 读取阶段: 即当该指标为 0 时,代表还在全量历史读取阶段; 当大于 0 时,则代表进入了 binlog 读取阶段。
三、详解新增 Oracle CDC 连接器
四、详解新增 MongoDB CDC 连接器
整个数据捕获过程,用户不需要学习 MongoDB 的副本机制和原理,极大地简化了流程,降低了使用门槛。MongoDB CDC 也支持两种启动模式:
默认的initial 模式是先同步表中的存量的数据,然后同步表中的增量数据; latest-offset 模式则是从当前时间点开始只同步表中增量数据。
五、总结和展望
Flink CDC 社区将会继续做好开源社区建设,在未来规划中,主要有三个方向:
做深 CDC 技术 如抽象复用 mysql-cdc 实现,让 Oracle, MongoDB 等也能快速支持无锁读取、并发读取等特性。
做广数据库生态 我们会支持更丰富的数据库 CDC 数据源,如 TiDB, DB2, MS SqlServer等。
做好数据集成场景 更好地集成实时数仓、数据湖的下游生态,包括 Hudi、Iceberg、ClickHouse、Doris 等。 进一步降低 CDC 数据入湖入仓的门槛,解决整库同步、表结构变更同步等痛点。
致谢:

▼ 关注「Apache Flink」,获取更多技术干货 ▼


文章转载自Flink 中文社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1391次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
845次阅读
2025-03-17 11:33:53
RAC 19C 删除+新增节点
gh
526次阅读
2025-03-14 15:44:18
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
485次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
385次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
337次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
282次阅读
2025-04-01 15:56:03
一键装库脚本3分钟极速部署,传统耗时砍掉95%!
IT邦德
275次阅读
2025-03-10 07:58:44
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
259次阅读
2025-03-19 14:41:51
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
258次阅读
2025-03-24 09:42:53