草庐IT

Flink CDC 2.3 发布,持续优化性能,更多连接器支持增量快照,新增 Db2 支持

Apache Flink 2024-01-04 原文

01

Flink CDC 简介

Flink CDC [1] 是基于数据库的日志 CDC 技术,实现了全增量一体化读取的数据集成框架。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。

作为新一代的实时数据集成框架,Flink CDC 具有全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等技术优势,同时社区提供了完整的文档支持 [2]。在 Flink CDC 开源的两年多时间里,社区成长迅速,目前 Flink CDC 社区已有 76 位贡献者,7 位 Maintainer,社区钉钉用户群超过 7800 人。

02

Flink CDC 2.3 概览

在社区用户和贡献者们的共同努力下, Flink CDC 2.3 正式发布了:

https://github.com/ververica/flink-cdc-connectors/releases/tag/release-2.3.0

2.3 版本共有 49 位社区贡献者参与贡献,累计解决 126 个 issue,合并了 133 个 PR,贡献者们累计贡献了 170+ 提交。从代码分布上看,MySQL CDC, MongoDB CDC, Oracle CDC,增量快照框架(flink-cdc-base)模块以及文档模块均为用户带来了很多特性和改进。

面对如此多的改进和特性,本文通过下图带你 3 分钟快速了解 Flink CDC 2.3 版本的重大改进和核心特性。

  • 新增 Db2 CDC 连接器, 解锁读取 Db2 数据库,支持全量和增量一体化同步。

  • MongoDB CDC,Oracle CDC 两大连接器均接入了增量快照框架,从而提供了无锁读取,并发读取和断点续传的能力。

  • MySQL CDC 连接器在 2.3 版本里进行了诸多性能优化和稳定性大改进,极大提升了生产稳定性和性能。

  • Flink CDC 2.2 版本兼容了 Flink 1.13 和 Flink 1.14,Flink CDC 2.3 在此基础上继续兼容了 Flink 1.15 & 1.16 大版本,从而兼容了 Flink 的四个大版本。这意味着 CDC 的 SQL connector 可以跑在不同的 Flink 集群上而无需任何修改,如果是 DataStream 用户也可以参考 SQL Connector 的打包方式,实现跨版本兼容。

  • OceanBase CDC 连接器支持将全部数据库类型对接到 Flink SQL,也就是说 OceanBase 所有类型的字段均支持同步。

  • MySQL CDC 和 OceanBase CDC 连接器提供中文文档,这可以更好地帮助到中文用户。


03

详解核心特性和重要改进

Flink CDC 2.3 版本带来了诸多重要的改进和特性,本文挑选最重要的四个进行深入解读。

3.1 新增 Db2 CDC 连接器

Db2 是 IBM 开发的关系型数据库 [3]。Db2 CDC 连接器可以捕获 Db2 数据库中表的行级变更,其实现原理是基于 ASN Capture/Apply agents 提供的 SQL 复制能力 ,将数据库中开启 capture mode 的表的变更存到指定的 change table 中。Db2 CDC 连接器首先通过  JDBC 读取表中的历史数据,再从 change table 中获取增量变更数据,从而实现全增量同步。

3.2 MongoDB CDC,Oracle CDC 连接器支持增量快照算法

在 Flink CDC 2.3 版本中,MongoDB CDC 连接器和 Oracle CDC 连接器都对接到了 Flink CDC 增量快照框架上,实现了增量快照算法,从而提供无锁读取,并行读取和断点续传的功能。

至此,Flink CDC 支持增量快照算法的数据源不断扩大,在接下来的版本中,社区也在规划让更多的连接器对接到增量快照框架上。

3.3 MySQL CDC 连接器优化

作为社区最受用户关注的 MySQL CDC 连接器,2.3 版本中社区引入了诸多高级特性,极大地提升了性能和稳定性,具体包括:

3.3.1 支持指定位点启动

MySQL CDC 连接器支持从指定的位点启动作业。可以通过 timestamp,binlog offset 或 binlog gtid 的方式指定作业启动时的 binlog 具体位置,还支持设置为 earliest-offset 从最早的 binlog 位点启动作业。

3.3.2 分片算法优化

2.3 版本对全量阶段分片算法进行优化。将目前的同步分片改为异步进行,支持用户指定主键中某一列作为分片的切分列,并且分片过程支持 checkpoint,提升了全量读取阶段时因为同步分片阻塞导致的性能问题。

3.3.3 稳定性提升

MySQL CDC 连接器支持全部字符集对接到 Flink SQL,解锁更多用户场景,支持宽容默认值提升作业对不规范 DDL 的容忍度,支持自动获取数据库的时区从而解决时区问题。

3.3.4 性能提升

2.3 版本 MySQL CDC 重点优化了内存和读取性能,通过 JM 里的 meta 复用和 TM 中流式读取等改进降低了 JM 和 TM 的内存使用;同时通过优化 binlog 解析逻辑提升了 binlog 读取性能。

3.4 其他改进

  • Flink CDC 2.3 版本兼容了 Flink 1.13,1.14,1.15 和 1.16 四个大版本,极大地降低用户 Connector 的升级和运维成本。

  • OceanBase CDC 修复了时区问题,支持全类型对接到 Flink SQL,并提供了更多的配置项,支持更灵活的配置。如新增加 table-list 配置项,支持访问多张 OceanBase 数据表等。

  • MongoDB CDC 支持了更多的数据类型,优化了捕获表的筛选过程。

  • TiDB CDC 修复了全增量切换时数据丢失问题,支持读取时 region 切换。

  • Postgres CDC 支持 geometry 类型,开放了更多配置项,支持配置 changelog mode 来过滤发送的数据。

  • SqlServer CDC 支持了更多的版本,并对文档 [4]进行完善。

  • MySQL CDC 和 OceanBase CDC 连接器提供了中文文档 [5][6],此外还对 OceanBase CDC 连接器提供了视频教程 [7]


04

 未来规划

Flink CDC 开源社区的发展,得益于贡献者们的无私贡献和 Maintainer 成员的开源布道,更离不开广大 Flink CDC 用户群体的积极反馈和宣传布道,Flink CDC 社区将会继续做好开源社区建设。当前 Flink CDC 社区正在做 2.4 版本的规划 [8],也欢迎所有用户和贡献者参与反馈,在接下来的 2.4 版本,社区主要方向计划从下述四个方面展开:

  • 数据源完善

支持更多的数据源,推动更多的 CDC 连接器接入增量快照框架,支持无锁读取、并发读取、断点续传等特性。

  • 可观测性提升

提供限流功能,以降低全量阶段对数据库产生的查询压力;提供更丰富的监控指标,可以获取到任务进度相关指标监控任务状态。

  • 性能提升

全量阶段支持使用 Batch 模式同步全量阶段数据,提升全量阶段性能;全量读取阶段结束后自动释放空闲 reader 资源等。

  • 易用性提升

提升连接器的易用性,比如简化开箱即用的配置参数,提供 Datastream API 程序示例等。

致谢:

感谢所有为 Flink CDC 2.3 版本做出贡献的覃立辉、莫贤彬、rookiegao、He Wang 等 49 位社区贡献者,特别感谢社区的四位 Maintainer 成员阮航、孙家宝、龚中强和任庆盛为 2.3 版本发布所做的杰出工作。

阿里云实时计算 Flink 版提供更多企业级 Flink CDC 能力 [9],包括了分库分表合并、表结构变更同步、整库同步等重要功能,更好的支持了阿里云实时数仓 ODPS-Hologres 等产品,同时使用可无缝构建实时数据仓库。欢迎感兴趣的用户移步阿里云产品官网体验使用。

贡献者列表:

01410172,Amber Moe,Dezhi Cai,Enoch,Hang Ruan,He Wang,JiaJia,Jiabao Sun,Junwang Zhao,Kyle Dong,Leonard Xu,Matrix42,Paul Lin,Qingsheng Ren,Qishang Zhong,Rinka,Sergey Nuyanzin,Tigran Manasyan,camelus,dujie,ehui,empcl,fbad,gongzhongqiang,hehuiyuan,hele.kc,hsldymq,jiabao.sun,legendtkl,leixin,leozlliang,lidoudou1993,lincoln lee,lxxawfl,lzshlzsh,molsion,molsionmo,pacino,rookiegao,skylines,sunny,vanliu,wangminchao,wangxiaojing,xieyi888,yurunchuan,zhmin,阿洋,莫贤彬


附录:

[1] https://github.com/ververica/flink-cdc-connectors

[2] https://ververica.github.io/flink-cdc-connectors

[3] https://www.ibm.com/products/db2

[4] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/sqlserver-cdc.html

[5] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/mysql-cdc%28ZH%29.html

[6] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/oceanbase-cdc%28ZH%29.html

[7] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/oceanbase-tutorial-zh.html

[8] https://github.com/ververica/flink-cdc-connectors/issues/1728

[9] https://www.alibabacloud.com/help/zh/realtime-compute-for-apache-flink/latest/data-synchronization-quick-start


Flink Forward Asia 2022

移动端直播预约

PC 端直播预约

建议前往 FFA 2022 大会官网预约直播

https://flink-forward.org.cn/

点击议题,即可查看议题详情以及讲师介绍

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

   点击「阅读原文,预约 FFA 大会直播~

有关Flink CDC 2.3 发布,持续优化性能,更多连接器支持增量快照,新增 Db2 支持的更多相关文章

  1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  6. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  7. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  8. ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe? - 2

    考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://

  9. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

  10. ruby-on-rails - 撤消 "rails generate scaffold"后是否需要撤消 "db:migrate"? - 2

    我是RoR的新手,我正在学习MichaelHartl的教程(所以请随意更正我在您认为合适的地方使用的术语)。在第2章中,我通过运行以下行创建了一个Users表:$railsgeneratescaffoldUsername:stringemail:string$bundleexecrakedb:migrate然后,我运行了下面的代码来尝试创建一个Microposts表(但是,我拼错了没有“r”的Micropost!)...$railsgeneratescaffoldMiropostcontent:stringuser_id:integer$bundleexecrakedb:migrate

随机推荐