Flink CDC 2.3发布
2022-02-10李佳
李佳
Flink CDC是基于数据库的日志CDC技术,实现了全增量一体化读取的数据集成框架。配合Flink优秀的管道能力和丰富的上下游生态,Flink CDC可以高效实现海量数据的实时集成。
作为新一代的实时数据集成框架,Flink CDC具有全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等技术优势,同时社区提供了完整的文檔支持。在Flink CDC开源的2年多时间里,社区成长迅速,目前Flink CDC社区已有76位贡献者,7位Maintainer,社区钉钉用户群超过7 800人。2.3版本共有49位社区贡献者参与贡献,累计解决126个issue,合并了133个PR,累计贡献了170余个提交。从代码分布上看,MySQL CDC,MongoDB CDC,Oracle CDC和增量快照框架(flink-cdc-base)模块以及文档模块均为用户带来了很多特性和改进。Flink CDC 2.3版本带来了诸多重要的改进和特性,这里挑选最重要的4个进行深入解读。
新增Db2 CDC连接器
Db2是IBM开发的关系型数据库。Db2 CDC连接器可以捕获Db2数据库中表的行级变更,其实现原理是基于ASN Capture/Apply agents提供的SQL复制能力,将数据库中开启capture mode的表的变更存到指定的change table中。Db2 CDC连接器首先通过JDBC读取表中的历史数据,再从change table中获取增量变更数据,从而实现全增量同步。
MongoDB CDC,Oracle CDC连接器支持增量快照算法
在Flink CDC 2.3版本中,MongoDB CDC连接器和Oracle CDC连接器都对接到了Flink CDC增量快照框架上,实现了增量快照算法,从而提供无锁读取、并行读取和断点续传的功能。至此,Flink CDC支持增量快照算法的数据源不断扩大,在接下来的版本中,社区也在规划让更多的连接器对接到增量快照框架上。
MySQL CDC连接器优化
作为社区最受用户关注的MySQL CDC连接器,2.3版本中社区引入了诸多高级特性,极大地提升了性能和稳定性,具体包括:
支持指定位点启动
MySQL CDC连接器支持从指定的位点启动作业。可以通过Timestamp、Binlog Offset或Binlog Gtid的方式指定作业启动时的Binlog具体位置,还支持设置为Earliest-Offset从最早的Binlog位点启动作业。
分片算法优化
版本对全量阶段分片算法进行优化。将目前的同步分片改为异步进行,支持用户指定主键中某一列作为分片的切分列,并且分片过程支持checkpoint,提升了全量读取阶段时因为同步分片阻塞导致的性能问题。
稳定性提升
MySQL CDC连接器支持全部字符集对接到Flink SQL,解锁更多用户场景,支持宽容默认值提升作业对不规范DDL的容忍度,支持自动获取数据库的时区从而解决时区问题。
性能提升
MySQL CDC重点优化了内存和读取性能,通过JM里的meta复用和TM中流式读取等改进降低了JM和TM的内存使用;同时通过优化Binlog解析逻辑提升了Binlog读取性能。
其他改进
FlinkCDC 2.3版本兼容了Flink 1.13,1.14,1.15,1.16四个大版本,极大地降低用户Connector的升级和运维成本。
OceanBaseCDC修复了时区问题,支持全类型对接到Flink SQL,并提供了更多的配置项,支持更灵活的配置。如新增加table-list配置项,支持访问多张OceanBase数据表等。
MongoDBCDC支持了更多的数据类型,优化了捕获表的筛选过程。
TiDB CDC修复了全增量切换时数据丢失问题,支持读取时region切换。
PostgresCDC支持geometry类型,开放了更多配置项,支持配置changelogmode来过滤发送的数据。
SqlServer CDC支持了更多的版本,并对文档进行完善。
MySQL CDC和OceanBase CDC连接器提供了中文文档,此外还对OceanBase CDC连接器提供了视频教程。
未来规划
Flink CDC开源社区的发展,得益于贡献者们的无私贡献和Maintainer成员的开源布道,更离不开广大Flink CDC用户群体的积极反馈和宣传布道,Flink CDC社区将会继续做好开源社区建设。当前Flink CDC社区正在做2.4版本的规划,也欢迎所有用户和贡献者参与反馈,在接下来的2.4版本,社区主要方向计划从下述4个方面展开:
数据源完善
支持更多的数据源,推动更多的CDC连接器接入增量快照框架,支持无锁读取、并发读取、断点续传等特性。
性能提升
支持使用Batch模式同步全量阶段数据,提升全量阶段性能;全量读取阶段结束后自动释放空闲Reader资源等。
可观测性提升
提供限流功能,以降低全量阶段对数据库产生的查询压力;提供更丰富的监控指标,可以获取到任务进度相关指标监控任务状态。
易用性提升
提升连接器的易用性,比如简化开箱即用的配置参数,提供Datastream API程序示例等。