Flink CDC 2.4 正式发布,新增 Vitess 数据源,更多连接器支持增量快照,升级 Debezium 版本...

news2024/11/19 7:22:10

01

Flink CDC 简介

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

19bf32c36a18ca4f38385e964c5f545e.png

作为新一代的实时数据集成框架,Flink CDC 具有全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等技术优势,同时社区提供了完善的中英文文档支持 [2]。在 Flink CDC 开源的三年时间里,社区发展迅速,目前 Flink CDC 社区已有 91 位贡献者,7 位 Maintainer 成员,社区钉钉群(群号: 33121212) 超过 8900 人。

02

Flink CDC 2.4 概览

在社区用户和开发者们的共同努力下, Flink CDC 2.4 在端午假期后正式发布了:

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

2f1eded6f6a54443a98daac1de44a7b8.png

2.4 版本共有 32 位社区贡献者参与贡献,计解决 141 个 issue,合并了 86 个PR,贡献了 96 个 commits。从代码分布上看,MySQL CDC, MongoDB CDC, PostgreSQL CDC,增量快照框架(flink-cdc-base)模块以及文档模块均为用户带来了很多特性和改进。

本文通过下图带你 10 分钟快速了解 Flink CDC 2.4 版本的重大改进和核心特性。

f1c35a0deab42ad370b7309f25663c55.png

  • 新增 Vitess CDC 连接器,支持 Vitess 增量数据同步。

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

  • 2.4 版本升级 Debezium 的依赖版本到 1.9.7.Final,引入了 Debezium 新版本的功能,优化和修复,比如:修复部分 DDL 无法解析的问题,修复解析 MySQL JSON 函数问题,Oracle 事件增加 scn 信息等。

  • 增量快照框架在 2.4 版本增加了自动关闭全量阶段结束后的空闲 Reader 功能,该功能非常实用,可以在生产环境节省资源。

  • MySQL CDC 连接器在 2.4 版本支持读取无主键表,同时支持新增表时原有实时同步链路不断流。

  • 社区 2.4 版本兼容 Flink 1.13 ~ 1.17 五个 Flink 版本。CDC 的 SQL Connector 可以跑在不同的 Flink 集群上而无需任何修改,实现跨版本兼容。如果是 Datastream 作业,则需要根据不同的 Flink 版本引入不同版本的 flink-shaded-guava 依赖,DataStream 用户可以参考 SQL Connector 的打包方式管理正确的依赖。

  • MongoDB CDC 支持指定时间戳消费数据,支持 mongodb + srv 连接协议,并修复了若干问题,如:无法解析带连字符的库名,'poll.await.time.ms' 配置未生效,解析 DDL出现空指针等。

  • OceanBase CDC 连接器支持 JDBC 参数设置,支持指定 Oracle 驱动,完善对 Oracle 数据类型的支持。


03

详解核心特性和重要改进

3.1 深入解读

Flink CDC 2.4 版本带来了很多重要的改进和特性,本文挑选最重要的五个进行进一步解读。

31787912fd8cdbca68ec1aece13a5616.png

  • 新增 Vitess CDC 连接器

Vitess [3] 是一个用于部署,扩展和管理大型 MySQL 实例集群的数据库解决方案。Vitess 的 VStream 是一个变更事件订阅服务,它能够提供与来自 Vitess 集群底层 MySQL 分片的二进制日志相同的信息。下游可以订阅一个 keyspace 的多个分片,很方便的实现 Vitess 的下游 CDC 处理工具。Vitess CDC 连接器利用 VStream 获取数据变更消息并发送,目前只支持读取增量阶段的变更同步,相当于仅支持 latest 的启动模式。

Vitess CDC 连接器的支持背后还有个小故事,该 Connector 是来自 Vinted 的 Simonas Gelazevicius 开发,秉持 upstream first 的开源贡献精神,这位贡献者从 2.0 版本就请求社区合并。但是这个数据源国内用户非常少,各个Maintainer 都不熟悉其技术细节,所以一直没能合并到社区主干分支。Simonas Gelazevicius 在 Flink CDC 社区每发布一个版本后都会主动 rebase PR, 这股坚持打动了社区全体 Maintainer 成员,社区 Maintainer 任庆盛和方盛凯主动学习 Vitess 相关技术,帮助 review 并改进 PR。最终该连接器由贡献者Simonas Gelazevicius, Gintarasm ,方盛凯和任庆盛共同完成。

  • PostgreSQL CDC 和 SQL Server CDC连接器接入增量快照框架

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

c7c9ab9e001c977378238a75c0c38b1d.png

  • PostgreSQL CDC 连接器支持增量快照原理

PostgreSQL CDC 连接器需要结合 logical decoding [4] 功能读取 PostgreSQL 事务日志中的变更数据,这需要启动一个在整个集群中唯一的 Replication Slot,并在 output plugin [5] 的帮助下处理这些变更,通过记录读取到的 WAL 位点来实现增量阶段的切换和故障恢复。

增量快照框架除了在增量阶段需要读取变更数据,在全量阶段对每个 SnapshotSplit 也需要启动 Backfill Task 同步做快照时发生的变更。为了避免 Replication Slot 出现冲突,PostgreSQL CDC 连接器采用以下方法建立 Slot。首先 ‘slot.name’ 配置项为必填,需要用户指定,这里指定的 slot name 会用在增量阶段启动的 Slot,并且这个 Slot 在作业启动时就会创建,在作业停止后也不会删除,以此来保证增量阶段读到启动后完整的变更数据,并可以从 Checkpoint 重启。对于全量阶段每个 Backfill Task 的 Slot,会使用“slotname_subTaskId”的命名风格,为了避免冲突和浪费 Slot 资源,这些 Slot 将会在全量读取停止后删除。

  • SQL Server CDC连接器支持增量快照原理

SQL Server CDC 连接器通过变更数据捕获功能 [6] 读取指定数据库和表的变更数据,并存到专门建立的 change table 中。这需要对指定的数据库和表开启 CDC 功能,来获取行级别的变更。通过记录数据库日志的 LSN (Log Sequence Number),来实现增量阶段的切换和故障恢复。

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

  • 增量快照框架支持自动释放资源

Flink CDC 的增量快照框架有两个主要阶段:全量阶段和增量阶段。这两个阶段的并行度并不相同,全量阶段支持多并行度,加快大量数据的同步过程,增量阶段读取变更日志,需要使用单并发保证事件的顺序和正确性。在全量阶段读取结束后,由于增量阶段只需要一个并发,会出现大量的空闲 Reader,比较浪费资源。2.4 版本使用增量快照连接器时,支持配置打开自动关闭空闲 Reader 的功能来关闭这些空闲 Reader。由于这个功能依赖于 Flink 1.14 之后支持的 Checkpoint on finished Task 特性,所以只支持在 Flink 1.14 或更新的 Flink 版本上使用。

  • MySQL CDC 连接器功能更新

作为社区最受用户关注的 MySQL CDC 连接器,2.4 版本中社区引入了一些高级特性,具体包括:

    1. 支持无主键表

    MySQL CDC 连接器 2.4 版本支持使用无主键表,相比于有有主键的 MySQL 表,无主键表存在一些使用上需要额外注意的事项。无主键表使用时需要通过 ‘scan.incremental.snapshot.chunk.key-column’ 配置指定一列作为分片列,用于将表分为多个分片进行同步,建议选择有索引的列作为分片列,使用无索引的列将会导致全量阶段多并发同步时使用表锁。其次,选择的分片列需要保证不存在数据的更新操作(比如从 1 更新到 2),如果存在更新操作,则只能保证 At-Least-Once 语义。

    2. 支持新增表实时不断流

    MySQL CDC 之前在处理新增表时,原有的实时同步链路会发生断流现象,需要等待新增加表的全量读取结束后,才会继续进行同步,会对延迟敏感的用户造成较大影响。例如,新增加的表历史数据比较多,完成新增表的全量同步需要花费 30 分钟,那么对于已经处于增量阶段的表,将需要等待 30 分钟后才可以继续同步属于该表的增量数据。2.4 版本对新增表的处理逻辑进行进一步优化,确保新增加的表的全量阶段不会影响已有的实时同步链路,极大地提升了用户体验。

    3. 问题修复

    2.4 版本中,MySQL CDC 连接器对社区用户反馈的使用问题进行了修复,如指定 Binlog 位点消费无法从 savepoint 启动,数据库存在特殊字符无法处理,大小写敏感导致的分片错误问题等。


3.2 其他改进

  • Debezium 版本依赖升级到 1.9.7.Final 版本,引入对应 Debezium 版本的新功能和修复。

  • Flink CDC 2.4 版本兼容了 Flink 1.13 ~ 1.17 五个大版本,极大地降低用户 Connector 的升级和运维成本。

  • OceanBase CDC 连接器支持 JDBC 参数设置,支持指定驱动,完善对 Oracle 数据类型的支持,同时修复了异常重连总是失败等问题。

  • MongoDB CDC 支持指定时间戳消费数据,支持 mongodb + srv 连接协议,并修复如无法解析带连字符的库名,'poll.await.time.ms' 配置未生效,解析 DDL 出现空指针等问题。

  • Oracle CDC 修复了全量阶段存在的数据正确性问题。

  • 所有 CDC 连接器支持打印配置信息,便于排查问题。

04

未来规划

Flink CDC 开源社区的发展,得益于全体贡献者的无私贡献和 Maintainer 成员出色的社区工作,更离不开广大 Flink CDC 用户群体的积极使用和反馈报错。Flink CDC 社区将会坚持做好开源社区的建设, 当前社区正在规划 2.5 版本 [7], 欢迎贡献者和用户积极反馈,在接下来的版本,社区主要方向会围绕下述四个方面展开:

  • 丰富数据源

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

  • 优化增量快照框架

对增量快照框架接入中遇到的问题进行优化,各个 CDC 连接器在增量快照框架可重用的代码进行提取整理。

  • 完善限流与监控

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

  • 更丰富的使用方式

支持 At least once 语义,支持 Snapshot only 的启动模式等,可以为使用者提供更多的场景应用。

  • 收敛支持的 Flink 版本

随着 Flink 版本逐渐增多,CDC 为兼容多个Flink版本的维护压力也逐渐增加。参考目前 Flink 连接器的规则 [8],在后续版本中,CDC 连接器将会考虑仅支持 Flink 最新的 3-4 个版本。

致谢

感谢社区的 Maintainer 成员阮航, 徐榜江,孙家宝,龚中强,任庆盛为该版本所做的社区和发版工作。感谢所有为该版本做出突出贡献的 Tigran Manasyan,川粉,Xiao Meng,Yaroslav Tkachenko, Simonas Gelazevicius, gintarasm 等 32 位社区贡献者。

贡献者列表 (按字母排序)

Hang Ruan,He Wang,JasonLee,Jiabao Sun,Jingsong Lee,Xiao Meng,Leonard Xu,Qingsheng Ren,Robert Metzger,Sergey Nuyanzin,Simonas Gelazevicius,Yaroslav Tkachenko,Tigran Manasyan,Tyrantlucifer,ZhongLinLeo,bb chen,ehui,emhui,gintarasm,gongzhongqiang,liangyaohui97,lin.zl,molsionmo,skylines,tison,wallkop,wangxiaojing,wuzhenhua,xixingya,zhaomin,zhuyuan03,含风


附录

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

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

[3] https://vitess.io/

[4] https://www.postgresql.org/docs/current/logicaldecoding-explanation.html

[5] https://www.postgresql.org/docs/current/logicaldecoding-output-plugin.html

[6] https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-2017

[7] https://github.com/ververica/flink-cdc-connectors/issues/2239

[8] https://cwiki.apache.org/confluence/display/FLINK/Externalized+Connector+development#ExternalizedConnectordevelopment-Flinkcompatibility

活动预告|6月29日 Flink CDC 2.4 

新版本发布,专家在线解读

活动详情

时间:6月29 日 19:00

直播观看链接:https://gdcop.h5.xeknow.com/sl/8T3ku

点击下方⬇️图片扫码直达直播间:

d6302b3147428c834b7f1e42fcc26230.jpeg

观看直播的小伙伴们还能一起加入到“答疑环节中”跟大咖在线交流哦!

「直播过程中,同学们可以在评论区踊跃提问,讲师将在分享结束后统一解答。分享结束后有 10 分钟的答疑互动环节!」

■ 了解更多 Flink CDC 相关技术问题,可扫下方⬇️二维码加入社区钉钉交流群~

382063a26223a7106088398cf1e9fdfb.jpeg


为进一步帮助开发者学习使用 Flink,Apache Flink 中文社区近期发起 Flink-Learning 实战营项目。本次实战营通过真实有趣的实战场景帮助开发者实操体验 Flink,课程包括实时数据接入、实时数据分析、实时数据应用的场景实。并结合小松鼠助教模式,全方位帮助入营开发者轻松玩转 Flink,点击下方图片扫码即刻入营

2cbe0a76bf1814255fb0b48738091558.png

往期精选

9afdea7c932ba056016a6eafd44978d3.png

723706731f7bb4926221d29e8288a834.jpeg

5c34983972a20c806824e9b2dc6b1858.jpeg

5528215075e18e1b34c1787bc48f773c.jpeg

5c8aac5c14ada44eba339cc3b3916587.jpeg


▼ 活动推荐▼

fce40273bb517618eb59364f60cc3b61.jpeg

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

5b75e02c1a8648ace2f5a76a5adb24ad.png

 50d69c70dfd763711b160fe0f05dd704.gif  点击「阅读原文」,直达直播间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二进制搭建Kubernetes集群(三)——部署多master

本文将完成多master集群的部署,即部署master02,以及nginx负载均衡、keepalived高可用 多master集群架构图: 架构说明: node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver…

【Solr】中文分词配置

提示:在设置中文分词前需确保已经生成过core,未生成core的可以使用:solr create -c "自定义名称"进行定义。 未分词前的效果预览: 下载分词器: 下载地址: https://mvnrepository.com/artifact/com.github.m…

山西电力市场日前价格预测【2023-06-29】

日前价格预测 预测明日(2023-06-29)山西电力市场全天平均日前电价为407.26元/MWh。其中,最高日前价格为539.37元/MWh,预计出现在21: 15。最低日前电价为312.43元/MWh,预计出现在13: 00。以上预测仅供学习参考&#xff…

Java调用ssl异常,javax.net.ssl.SSLHandshakeException: No appropriate protocol

现象:sqlserver 2017 安装在docker里,系统是mac 13,java 1.8.371运行java程序提示上面ssl错误,根据百度提供的方法,修改文件,重启程序搞定。 解决办法:java.security 找到这个文件修改保存 发…

RPC(Remote Procedure Call)学习

目录 一、概念 二、RPC 调用基本流程 一、概念 RPC 全称是 Remote Procedure Call (远程过程调用),它是一种通过网络从远程计算机程序上请求服务,可以提供终结点映射程序以及RPC服务,而不需要了解底层网络技术的协议…

三位数字显示电容测试表

广大电子爱好者都有这样的体会,中、高档数字万用表虽有电容测试挡位,但测量范围一般仅为 1pF~20F,往往不能满足使用者的需要,给电容测量带来不便。本电路介绍的三位数显示电容测试表采用四块集成电路,电路简洁、容易制…

element-ui中el-table设置固定高度后,底部合计栏被遮盖

如图: 解决办法:el-table加上ref"summaryTab",然后在自定义合计计算方法getSummaries中加上如下代码就ok了 this.$nextTick(() > {this.$refs.summaryTab.doLayout(); }); 没用使用自定义合计计算函数的,也可以写在updated中,如下: updated() {this.$nextTick((…

关于ipad:无法验证服务器身份

ipad 连接网络后,有时候会冒出这个弹窗,并且关掉后仍继续弹出 可以尝试以下几种方法:(我是用③解决的) ①. 确保你的iPad连接的是稳定的网络。有时候网络连接不稳定会导致无法验证服务器身份。 我们学校这个校园网…

Karl Guttag评Vision Pro(三):为什么飞机上VR观影体验不佳?

在过去25年里,AR/VR头显显示技术得到长足发展,采用的屏幕规格越来越高。据早前报告预测,VR头显安装基数会在2023年达到约2500万台。尽管如此,相比于无处不在的手机,我们几乎看不到周围有人随身携带AR/VR头显&#xff0…

APP为什么没有被小程序取代呢?

在科技行业日新月异的发展下,一直存在一种声音,认为小程序将逐步取代APP。然而,事实却并非如此。APP至今仍然以其独特的优势,坚挺地存在于市场之中。这是为何呢?以下是我们对此的几点考察。 首先,APP在功能…

「RPA中国杯 · 第五届RPA极客挑战赛」成功举办及获奖名单公示

2023年6月26日,「RPA中国杯 第五届RPA极客挑战赛」在苏州国际博览中心圆满结束。本次挑战赛由RPA中国和全球人工智能产品应用博览会主办,容智信息、金智维、弘玑Cyclone、UiPath联合主办,centific、中投创展协办。 RPA已经成为提高企业生产…

uniapp 详细封装缓存定时过期方法,详细使用过程

最近在开发一个uniapp的项目,中间我们需要给缓存定时,为了解决这个问题,封装了一个方法用来解决这个问题,当时遇到这个问题是因为在项目中要给阿里的OSS上传文件,上传之间先要向服务端请求获取授权,授权我们…

3、动手学深度学习——多层感知机:多层感知机的实现(从零实现+内置函数实现)

1、多层感知机基础知识 1. 简述 加入隐藏层和激活函数,可以将线性模型变成非线性模型,引入了非线性拟合能力。 我们通过在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。要做到这一点,最简…

密码学—DES加密算法

文章目录 DES流程DES细节生成密钥DES加密E盒扩展S盒替换P盒置换 DES流程 因为DES是对比特流进行加密的,所以信息在加密之前先转为二进制比特流 1:生成16把密钥 只取给出的密钥比特流中64位,不够64则补0对64位进行PC1表置换,64位进…

vscode搭建汇编环境

汇编语言环境的配置 教程 视频教程 https://www.nasm.us/pub/nasm/releasebuilds/?CM;OD 下载zip压缩包,去目录去解压,然后把根目录配置到环境的变量 vscode搭建汇编环境 插件 assembly Hex editor 这个是用来显示.exe文件的十六字进制的显示 下载…

基于 DTS 同步 MySQL 全增量数据至 CKafka,构建实时数仓的最佳实践

背景介绍 随着 IT 技术与大数据的不断发展,越来越多的企业开始意识到数据的价值,通过大数据分析,可以帮助企业更深入地了解用户需求、更好地洞察市场趋势。目前大数据分析在每个业务运营中都发挥着重要作用,成为企业提升市场竞争…

【最短路dij】牛客练习赛112D qsgg and Subway

D-qsgg and Subway_牛客练习赛112 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 感觉这类题难的地方就是更新v的那个值比较难求 思路&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxe1e610; co…

G1垃圾回收参数调优及MySQL虚引用造成GC时间过长分析 | 京东云技术团队

1. 背景 我方有一应用&#xff0c;偶尔会出现GC时间过长&#xff08;间隔约4小时&#xff09;&#xff0c;导致性能波动的问题(接口最长需要耗时3秒以上)。经排查为G1垃圾回收器参数配置不当 叠加 MySQL 链接超过闲置时间回收&#xff0c;产生大量的虚引用&#xff0c;导致G1在…

wordpress里的日主题ripro登录一直返回0,或者循环登录

如以下网站&#xff1a;爱豆坤坤博客_最爱蔡徐坤&#xff0c;专注活动&#xff0c;软件&#xff0c;资源&#xff0c;教程分享!。点击登录后一直提示登录。或者返回0.具体原因是因为插件乱用导致。需要查看文件wp-load.php 删除最后的include("/www/wwwroot/25qi.cn/wp-co…

c语言通讯录——文件版本(带详细文字解释)

1.定义一个用于存储一个人的信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体&#xff08;struct&#xff09;类型&#xff0c;用于存储有关一个…