前言
Flink CDC (CDC Connectors for Apache Flink®) [1]是 Apache Flink® 的一组 Source 连接器,反对从 MySQL,MariaDB, RDS MySQL,Aurora MySQL,PolarDB MySQL,PostgreSQL,Oracle,MongoDB,SqlServer,OceanBase,PolarDB-X,TiDB 等数据库中实时地读取存量历史数据和增量变更数据,用户既能够抉择用户敌对的 SQL API,也能够应用性能更为弱小的 DataStream API。
作为新一代的数据集成框架,Flink CDC 不仅能够代替传统的 DataX 和 Canal 工具做实时数据同步,将数据库的全量和增量数据一体化地同步到音讯队列和数据仓库中;也能够用于实时数据集成,将数据库数据实时入湖入仓;同时还反对弱小的数据加工能力,能够通过 SQL 对数据库数据做实时关联、打宽、聚合,并将物化后果写入到各种存储中。
绝对于其余数据集成框架,Flink CDC 具备全增量一体化、无锁读取、并发读取、表构造变更主动同步、分布式架构等技术劣势,在开源社区中十分受欢迎,成长迅速,文档欠缺[2],目前社区已有 44 位贡献者,4 位 Maintainer,社区用户群超过 4000 人。
一、Flink CDC 2.2 概览
通过 3 个多月的缓和开发,在社区开发者们的共同努力下,Flink CDC 2.2 版本正式公布了:https://github.com/ververica/…
2.2 版本共有 34 位社区贡献者参加奉献,累计奉献了 110+ commits。一图胜千言,本文通过下图带你一分钟疾速理解 Flink CDC 2.2 版本的重大改良和外围个性。
- 2.2 版本新增 OceanBase,PolarDB-X,SqlServer,TiDB 四种数据源接入,均反对全量和增量一体化同步。至此,Flink CDC 已反对 12 种数据源。
- Flink CDC 兼容 Flink 1.13 和 Flink 1.14 两个大版本,2.2 版本的所有 Connector 都反对跑在 Flink 1.13. 或 Flink 1.14. 的集群上。
- 提供增量快照读取框架,不便其余连接器接入,其余连接器采纳该框架后,便能够提供无锁算法,并发读取,断点续传等性能。
- MySQL CDC 反对动静加表,该性能能够在无需从新读取已有表的根底上,减少须要监控的表,增加的表会主动先同步该表的全量数据再无缝切换到同步增量数据。
- MongoDB CDC 反对正则表达式过滤汇合,该性能能够让用户在作业中指定所需监控的库名和汇合名,用户能够用一个作业中监控多个数据库或多个汇合。
二、新增 4 种数据源反对
Flink CDC 2.2 版本新增了 OceanBase CE,PolarDB-X,SqlServer,TiDB 四种数据源接入。其中新增 OceanBase CDC,SqlServer CDC,TiDB CDC 三个连接器,而 PolarDB-X 的反对则是通过对 MySQL CDC 连接器进行兼容适配实现。
- OceanBase CE
OceanBase CE[3]是一款开源分布式数据库管理系统,同时反对在线事务处理与在线剖析解决。OceanBase CDC 的实现机制是全量局部通过 JDBC 读取表中的历史数据,增量局部则是通过 OceanBase 提供 LogProxy Client 获取增量变更数据。
- PolarDB-X
PolarDB-X[4] 是一款云原生分布式数据库系统。PolarDB-X 高度兼容 MySQL 零碎及生态等特点, 其外部的日志节点提供了齐全兼容 MySQL Binlog 格局和协定的增量生产能力。这些个性使得 PolarDB-X 通过适配 MySQL CDC 即可疾速接入 Flink CDC,PolarDB-X 的反对正是通过 MySQL CDC 适配实现,这种形式接入代价绝对较小,但却能够获取 MySQL CDC 连接器的全副能力。
- SqlServer
SqlServer[5] 是一种应用宽泛的数据库,SqlServer CDC 连接器反对捕捉并记录 SqlServer 数据库服务器中产生的行级变更,其原理是应用 SqlServer 本身提供的 CDC 个性,SqlServer 本身提供的 CDC 能力能够将数据库中指定的变更存档到指定的 change tables 中。SqlServer CDC 连接器首先通过 JDBC 读取表中的历史数据,再从 change tables 中或缺增量变更数据,从而实现全增量同步。
- TiDB
TiDB[6] 是一款开源分布式关系型数据库,同时反对在线事务处理与在线剖析解决。TiDB CDC 的原理是通过间接读取其底层 TiKV 存储中的全量数据和增量数据实现数据捕捉,其中全量局部是通过按 key 划分 range 读取,增量局部应用 TiDB 提供的 CDC Client 获取增量变更数据。
三、详解外围 feature 和重要改良
3.1 外围 feature
- 提供增量快照读取框架
大家都晓得之前只有 MySQL CDC 反对无锁 + 多并发 + 全程断点续传等高级性能,这些性能最开始是在 2.0 版本中为 MySQL CDC 定制的增量快照读取算法实现,2.2 版本将增量快照读取算法形象成了公共框架,不便其余 connector 接入。
在增量框架实现后,其余 connector 只须要接入这个框架便能够提供无锁算法,并发读取,断点续传的能力。社区提供了一个基于增量快照框架的样例实现[7],开发者能够参考该样例实现一个反对增量快照读取的 CDC Source。
- 兼容 Flink 1.13 & Flink 1.14
在 2.2 版本之前,Flink CDC 连接器都只对应一个 Flink 大版本,比方很多用户反馈 Flink CDC 2.1 只能在 Flink 1.13 版本的集群上应用,没法在 Flink 1.14 的集群上应用。为了帮用户解决此类问题,Flink CDC 2.2 版本兼容 Flink 1.13. 和 Flink 1.14. 两个大版本,这象征 2.2 版本的所有 Connector 既能够跑在 Flink 1.13. 集群上,又能够跑在 Flink 1.14. 的集群上。通过提供兼容多版本的能力,让 Flink CDC 在提供 1.14 反对的同时,还极大地升高用户的 connector 治理老本。
- MySQL CDC 反对动静加表
构想下如果你一个 CDC pipeline 监控了 4 张表,忽然有天业务需要须要再加几张表,你必定不想另起作业 (浪费资源),那么这个 feature 能够让你在以后作业间接减少须要监控的表。新增表都是先做全量再优雅地切换到增量,遇到新增监控表时不必新起作业,极大地节约了资源。Flink CDC 网站也提供了该性能的应用文档[2],用户在开发时能够参考。
- MongoDB CDC 反对自定义数据库,自定义汇合
在 2.1 版本里 MongoDB CDC 只能捕捉单个汇合或者单个 DB 下的全副汇合,2.2 版本提供了正则匹配反对,用户能够指定本人须要的多个库和多个表。
- MySQL CDC 反对 MySQL 5.6
从 2.2 版本开始,MySQL CDC 反对了 MySQL 5.6 版本,满足低版本的 MySQL 用户需要。
3.2 重要改良
- MySQL CDC 通过心跳信息解决 binlog 过期问题
大家可能遇到过 binlog 过期问题,这种问题个别呈现在更新迟缓的表身上,这是因为 state 中记录的慢表位点总是最初一次更新的位点,如果 MySQL server 端只保留最近 1 天的 binlog,而某个慢表最近一天都没有更新过,那么 state 中记录的该表位点还是一天以前的位点,当 MySQL server 清理 binlog 后,作业再次拜访该位点就会报 binlog 无奈找到的谬误。2.2 版本中通过外部的心跳机制传递 binlog 的最新位点,将 state 中的位点从慢表对应的位点改成全局 binlog 最新位点,防止了慢表 binlog 过期问题。
- MySQL CDC 修复数组越界问题
该问题的根因是 MySQL CDC 依赖的第三方 binlog Client 存在数组越界 Bug,且是一个和网络相干的不稳固复现 Bug。在 Flink CDC 2.2 版本中,社区对这个问题做了修复,晋升了 MySQL CDC binlog 读取阶段的稳定性。
- Oracle CDC 修复 Numeric 类型映射问题
在 2.1 版本,Oracle CDC 在解决 Numeric 类型数据会呈现转换异样,在 2.2 版本中做了修复。
四、总结和瞻望
作为一个发动工夫不到两年的新兴我的项目,Flink CDC 我的项目获得了景象级的倒退和关注,这得益于 Flink CDC 开源社区所有贡献者们的自私奉献和开源布道,更离不开宽广 Flink CDC 用户群体的踊跃反馈。作为 2022 年的第一个版本,Flink CDC 给大家带来如此多的技术改良和外围个性,置信这些改良可能帮忙宽广的开发者和用户在各自的畛域取得更多冲破。Flink CDC 社区将会持续做好开源社区建设,在接下来的社区规划中,次要有四个方向。
- 欠缺 CDC 技术
推动增量快照框架在各个 CDC 连接器的应用,让更多的数据源疾速反对无锁读取、并发读取、断点续传、动静加表等个性。
- 扩大数据集成场景
CDC 只是解决一个 source 问题,很多业务须要联合整个数据场景全局地设计方案,比方更好地集成实时数仓、数据湖的上游生态,包含 Hudi、Iceberg、ClickHouse、Doris 等。
进一步升高 CDC 数据入湖入仓的门槛,解决整库同步、表构造变更同步等痛点。
- 晋升 Connector 性能
现有一些 Connector 在海量数据场景,大规模生产业务场景下,存在肯定的性能问题,须要社区投入更多的开发者打磨。
- 扩充数据库生态
反对更多的数据库,如 DB2, Vitness 等。
致谢:
感激所有为该版本做出奉献的 34 位社区贡献者,特别感谢来自 OceanBase 团队的 He Wang 奉献的 OceanBase CDC 连接器,来自大健云仓公司的 gongzhognqiang 奉献的 Sqlserver CDC 连接器,来自云账户公司的 eastfisher 奉献的 TiDB CDC 连接器,来自 PolarDB-X 团队的 hele.kc 对 PolarDB-X 反对与适配。
残缺贡献者列表:
Dian Qi, He Wang, Jark Wu, Jiabao Sun, Jingsong Lee, Junwang Zhao, Konstantin Knauf, Leonard Xu, Mustang Kong, Paul Zhang, Qingsheng Ren, Sergey Nuyanzin, Shengkai, Tuple, Xianxun Ye, Xuebing Li, Zongwen Li, camelusluo, eastfisher, ehui, fangpc, gongzhongqiang, hele.kc, hiscat, luoyuxia, paul8263, skylines, szgeqin, taox, tsreaper, wangxiaojing, wysstartgo, yexianxun, 元组 (从 commit 信息提取,按字母排序)
[1] https://github.com/ververica/…
[2] https://ververica.github.io/f…
[3] https://open.oceanbase.com
[4] https://polardbx.com
[5] https://www.microsoft.com/en-…
[6] https://docs.pingcap.com/zh/t…
[7] https://github.com/ververica/…
[8] https://ververica.github.io/f…
线上 Flink CDC Meetup 筹备中
点击下方链接,参加 Flink CDC 问卷调查,咱们会认真听取你的想法
https://survey.aliyun.com/app…
更多 Flink 相干技术问题,可扫码退出社区钉钉交换群
第一工夫获取最新技术文章和社区动静,请关注公众号~