Flink CDC 2.4 正式发布,5分钟了解CDC 2.4新内容,新增 Vitess 数据源,更多连接器支持增量快照,升级 Debezium 版本

news2024/11/18 5:32:29

Flink CDC 2.4 正式发布,5分钟了解CDC 2.4新内容,新增 Vitess 数据源,更多连接器支持增量快照,升级 Debezium 版本

  • 01. Flink CDC 简介
  • 02. Flink CDC 2.4 概览
  • 03. 详解核心特性和重要改进
    • 3.1 深入解读
    • 3.2 其他改进
  • 04. 未来规划

来源:https://ververica.github.io/flink-cdc-connectors/master/

01. Flink CDC 简介

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

具体关于Flink CDC是什么?可以看下这篇文字

在这里插入图片描述
作为新一代的实时数据集成框架,Flink CDC 具有全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等技术优势,同时社区提供了完善的中英文文档支持 [2]。

02. Flink CDC 2.4 概览

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

  • PostgreSQL CDCSQL 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 版本带来了很多重要的改进和特性,本文挑选最重要的五个进行进一步解读。

在这里插入图片描述

1、新增 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 ,方盛凯和任庆盛共同完成。

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

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

在这里插入图片描述

3、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 将会在全量读取停止后删除。

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

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

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

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

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

6、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 个版本。

[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

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

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

相关文章

vue中实现el-table点选和鼠标框选功能

实现思路: 项目有两个需求,既能在el-table实现点选又能实现鼠标框选 一. 点选实现思路: 使用el-table的cellClick方法, 1.直接给点击的cell添加类名,cell.classList.add("blue-cell");然后把获取的数据存入数组, 设置样式: ::v-deep .el-table td.blue-cell {border:…

安全帽冲击试验机

一、特点: KDJS-20AM安全帽冲击试验机(以下简称试验机)适用于安全防护器材安全帽冲击吸收性能试验与安全帽耐穿刺性能试验,冲击和穿刺试验结果既可直接导出到电子表格,也可上传至管理系统。 二、主要技术参数&#x…

蓝牙资讯|未来几年物联网迅猛发展,蓝牙发挥重要作用

IDC预测,2023年全球物联网(IoT)支出将达到8057亿美元,比2022年增长10.6%。物联网生态系统的投资预计将在2026年超过1万亿美元,在2023-2027年的预测期内,复合年增长率(CAGR)为10.4%。 到2023年,物联网服务将成为最大的…

mysql新建用户,连接认证时报错的解决办法

问题描述 mysql新建用户后,修改密码,进行连接认证时报错 Access denied for user testuserlocalhost (using password: YES)原因分析: 未授权 解决方案: GRANT ALL ON *.* TO testuserlocalhost ;注意*.*指对所有数据库下的所…

AOSP安卓源码编译

写在前面 继上次安卓源码下载篇以后已经过了很久了 这里需要补充一些内容,在现在安卓源码是建议只下载自己需要的某个版本,这样更快 #初始化仓库,-b 指示分支,这里使用 android10 repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/A…

Python入门教程+项目实战-14.3节-函数的可变参数

目录 14.3.1 理解可变参数 14.3.2 操作符*与** 14.3.3 对实参进行解包 14.3.4 知识要点 14.3.5 系统学习python 14.3.1 理解可变参数 函数的可变参数,可以从其字面意思来进行理解。“可变”是指参数的数目是变化的,不确定的。在Python中定义函数时…

feign与springcloud版本不匹配报错,查看springcloud组件与springcloud的匹配版本的方法

问题描述 springboot版本号是2.0.0.M3,springcloud的版本号是Finchley.M2 2023-06-27 00:40:02.158 ERROR 26304 --- [ restartedMain] o.s.boot.SpringApplication : Application startup failedjava.lang.IllegalStateException: Error processi…

基于c#和xml存储数据的员工管理系统

完整资料进入【数字空间】查看——baidu搜索"writebug" 项目介绍 本系统是人事管理系统,它主要实现管理员如何对普通用户进行授权,如何插入、删除一个员工的信息,用户如何浏览员工的所有信息,以及用户如何查询自己想要…

服务器数据库中了locked勒索病毒怎么办及正确的解密恢复流程是什么

在当今数字化时代,服务器数据库是企业重要的信息资产之一。然而,网络安全威胁也日益增加,其中之一便是勒索病毒。最近很多企业被.locked后缀勒索病毒攻击,导致系统的重要数据被加密,此次locked勒索病毒非常猖狂&#x…

运动耳机哪个好、超级适合运动的耳机推荐

无论你喜欢跑步、健身、骑行还是瑜伽等等,一款好的运动耳机都能够让你在运动过程中享受音乐的陪伴,让运动不再枯燥。运动耳机成为了运动伴侣中不可或缺的装备。今天,我将为大家介绍几款非常适合运动的耳机,并对这几款耳机进行全方…

在WSL2中安装IntelliJ IDEA开发工具

一、wsl支持图形 windows安装xming https://sourceforge.net/projects/xming/ 添加白名单 查看服务器ip ifconfig 编辑配置文件(结合自己的安装目录) ‪D:\ProgramFiles\Xming\X0.hosts 启动Xlaunh wsl 配置并验证 #b编辑配置文件 vi ~/.bashrc #末尾增加配置 export DI…

Clion开发STM32之W5500系列(三)

前言 编写w5500的驱动测试驱动 驱动编写 相关宏定义 #define sys_force_static_inline __attribute__((always_inline)) static inline寄存器驱动头文件 #ifndef STM32_VET6_W5500_REG_H #define STM32_VET6_W5500_REG_H#include "sys_core.h"#define MR (…

Java发送邮件-工具类-基于springboot

那么&#xff0c;废话少说&#xff0c;直接上代码。 1. 目录结构 重点是那几个带mail的&#xff0c;其他文件不用管。 2. pom <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schema…

【Java-14】3万字深入理解HashMap集合(高级)

1.HashMap集合简介 ​ HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储形式存在&#xff0c;即主要用来存放键值对。HashMap 的实现不是同步的&#xff0c;这意味着它不是线程安全的。它的key、value都可以为null。此外&#xff0c;HashMap中的映射不是有序的。…

chatgpt赋能python:Python跑步轨迹生成:如何利用Python生成跑步轨迹

Python跑步轨迹生成&#xff1a;如何利用Python生成跑步轨迹 如果你经常跑步&#xff0c;你可能会想知道你每次跑步的轨迹&#xff0c;而不仅仅是跑步的距离和时间。这时&#xff0c;Python可以帮助你生成跑步轨迹&#xff0c;并且还可以将轨迹可视化。在本文中&#xff0c;我…

软考高级系统架构设计师(五) 系统性能评价

目录 概要 性能指标 性能调整 ​阿姆达尔 性能评价 概要 性能指标 参考&#xff1a;【软考-系统架构设计师】知识要点-8 - 知乎 响应时间&#xff1a; 0.1秒&#xff1a;用户感觉不到任何延迟&#xff1b;1.0秒&#xff1a;用户愿意接受的系统立即响应的时间极限&#x…

Liunx 安装MySQL 8 社区版

1.下载MySQL版本 在官网可直接找见对应版本 wget https://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpmrpm -ivh mysql80-community-release-el8-5.noarch.rpm2. 使用命令 ls /etc/yum.repos.d/ | grep mysql 查看是否存在以下两个repo文件 3.更新yum资源 …

云原生改造- istio (二)

目录 1 VirtualService 文件 2 DestinationRule 文件 3 演示结果 前提 基于内容的灰度发布&#xff0c;保证在chrome下可以访问V2版本&#xff0c;其他浏览器可以访问v1. 1 VirtualService 文件 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:n…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)二:登录界面及对应功能实现

一、本章内容 本章介绍系统登录界面、登录流程、登录接口等相关内容的开发,实现包括账号密码登录、短信验证登录等不同的登录方式,使用svg-capter生成图形验证码,使用expressjwt实现登录token的生成及验证。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预…

CNAS软件测评实验室内审流程与技巧

软件检测实验室通过内部审核活动&#xff0c;可以验证内部体系的运行是否符合管理体系的要求&#xff0c;在内审时&#xff0c;需要审核宜检查管理体系是否满足 ISO/IEC17025 或 ISO/IEC17020、或其他相关准则文件的要求&#xff0c;即符合性检查。 还要检查组织的质量手册及相…