Apache Flink CDC 3.1.0版本知识学习

Apache Flink CDC 3.1.0版本知识学习

  • 一、Flink CDC 3.1 快速预览
  • 二、Transformation 支持
  • 三、分库分表合并支持
  • 四、使用 Kafka Pipeline Sink 高效写入 Canal/Debezium 格式数据
  • 五、更高效地实时入湖 Paimon
  • 六、其他改进
  • 七、Flink CDC 3.1 版本兼容性

一、Flink CDC 3.1 快速预览

作为 Flink CDC 成为 Apache Flink 子项目之后的首个版本,3.1 带来了许多新功能与稳定性提升。主要亮点包括:

  1. Transformation 支持:通过 YAML 管道定义中的 transform 部分,用户可以对数据变化事件进行投影、计算和添加常量列等转化,使用类似 SQL 的语法,提升数据集成管道的灵活性。
  2. 分库分表合并支持:可以通过在 YAML 管道定义中配置路由将多个表合并到一个目标表,自动处理业务数据在不同表或数据库的分区及源表的 schema 变化。
  3. 新连接器:引入了新的 Apache Kafka 和 Apache Paimon 的 Pipeline Sink,增强了生态系统的扩展性,其中Kafka Sink 使得用户可以发送原始Debeizum/ Canal Json 格式的CDC数据到消息队列,Paimon Sink 则是让用户可以简单高效地完成MySQL实时入湖。
  4. 连接器改进:如 MySQL 增加了 tables.exclude 选项和 MysqlDebeziumTimeConverter,OceanBase 支持 DebeziumDeserializationSchema,Db2 迁移到统一增量快照框架等。

二、Transformation 支持

Flink CDC 3.1.0 引入了在 CDC pipeline 中进行数据变换(transformation)的功能。通过在 YAML pipeline 定义中加入 transform 部分,用户现在可以轻松地对来源的数据变更事件应用各种变换,包括投影、计算和添加常量列,从而提高数据集成管道的效率。新特性利用类似 SQL 的语法定义这些转换,确保用户可以快速适应并使用它。例如,只需编写如下 YAML 语句块:

transform:- source-table: db.tbl1projection: id, age, weight, height, weight / (height * height) as bmifilter: age > 18 AND name IS NOT NULL

即可对传递的数据流应用投影操作(仅保留原表中的部分列)、计算操作(根据原列数据计算新列并追加到数据记录中)和过滤操作(从结果中清除符合条件的数据行)。可以书写多条 Transform 规则,它们会同时生效。

三、分库分表合并支持

Flink CDC 3.1.0 现在通过在 YAML pipeline 定义中配置 route,在分库分表场景下将多表合并为一个。由于业务数据量庞大,业务数据经常会被分别存放在多个表甚至数据库中。通过配置route,用户可以将多张源表映射至同一个目标表,在同步时,数据变更事件(DataChangeEvent)和 Schema 变更事件都将被合并到指定的目标表中。例如,只需编写如下 YAML 语句块:

route:- source-table: db.tbl\.*sink-table: db.unified- source-table: db.tbl_log\.*sink-table: db.log

即可将源库中所有匹配 tbl.*和 tbl_log.*正则表达式的分片表合并,并分别同步到下游的 db.unified和 db.log汇表中。(.用于分隔数据库名称和表名称,因此作为正则表达式关键字时需要使用 \进行转义。)可以书写多条 Route 规则,它们会同时生效。

四、使用 Kafka Pipeline Sink 高效写入 Canal/Debezium 格式数据

source:type: mysql# ...sink:type: kafkaproperties.bootstrap.servers: PLAINTEXT://localhost:62510value.format: canal-json

该作业将来自 MySQL 上游的变化数据编码为 Canal JSON 格式,并写入到指定的 Kafka 服务器中;相比于 Flink SQL Changelog 格式,Flink CDC 不会将数据更新事件拆分为 BEFORE 和 AFTER 两条记录,能够更高效地处理分区表场景,并支持将事件序列化为 Debezium 和 Canal JSON 格式。

在这里插入图片描述
Flink 支持将上述格式解析为标准变更消息处理,因此您可以简单地使用以下 Flink SQL 将其摄入流式处理框架,整个过程无需额外部署 Canal 或 Debezium 集群,直接复用已有 Flink 集群即可:

CREATE TABLE topic_products (-- 上游的 Schema 结构
) WITH ('connector' = 'kafka',-- ...'properties.bootstrap.servers' = 'localhost:9092','format' = 'canal-json'  -- 从 Kafka 摄取 Canal JSON 格式数据
)

完整的数据流示意图如下所示:
在这里插入图片描述

五、更高效地实时入湖 Paimon

Flink CDC 3.1.0 引入了新的 Apache Paimon Pipeline Sink(基于 Paimon 0.7.0 版本)。现在,您可以编写如下所示的 YAML 语句块来定义一个从 MySQL 捕获变化数据并写入下游 Paimon Sink 的 Pipeline 作业:

source:type: mysql# ...sink:type: paimoncatalog.properties.metastore: filesystemcatalog.properties.warehouse: /path/warehouse

可选择的下游元数据存储支持 FileSystem 和 Hive。在启用 Schema Evolution 选项时,Flink CDC 会同时捕获数据变更和表结构变更、在应用 Transform 和 Route 规则后将数据发送到下游,并将结构变更应用到 Catalog 中。完整的数据流示意图如下所示:

在这里插入图片描述
相比于使用 Flink SQL 和 Paimon CDC Action 的同步方案,Flink CDC Pipeline 作业支持将上游表结构变更动态应用至下游,且进一步支持了对上游表进行列投影和行过滤,提供细粒度的数据路由规则,追加计算列的逻辑配置更加简单。例如,以下 Paimon Action 变换语句:

flink run paimon-action.jar--metadata_column "table_name"--computed_column "name=UPPER(name)"--computed_column "nameage=CONCAT(name, age)"

可以使用 Flink CDC YAML 等效地表述为:

projection: \*, __table_name__, UPPER(name) as newage, CONCAT(name, age) as nam

六、其他改进

(1)MySQL Pipeline 连接器
在此版本中,MySQL pipeline source 引入了一个新的选项 tables.exclude,用户可以更简单地使用正则表达式排除不必要的表。

(2)MySQL Source 连接器
MySQL CDC source 同时新增了一个自定义转换器 MysqlDebeziumTimeConverter,用于将时间类型列转换为更易于读取和序列化的字符串。

(3)OceanBase Source 连接器
OceanBase CDC source 现在支持指定通用的 DebeziumDeserializationSchema,以重用现有的 Debezium 反序列化器。

(4)Db2 Source 连接器
Db2 CDC source 已经迁移至统一的增量快照框架。

(5)SinkFunction 支持
尽管 SinkFunction 在 Flink 中已被标记为弃用,但考虑到一些 Flink connector 仍在使用该 API,我们也为 CDC pipeline sink 支持 SinkFunction API 以帮助扩展 Flink CDC 的生态系统。

(6)CLI 支持从 savepoint 恢复
Flink CDC pipeline 提交 CLI 现在支持通过命令行参数 --from-savepoint 从特定的 savepoint 文件恢复 Flink 作业。

七、Flink CDC 3.1 版本兼容性

4.1 Group ID 和 Package 路径变更

如果正通过 Maven 或 Gradle 声明 Flink CDC 依赖,则需要在升级到 3.1 版本的同时将 Group ID 从 com.ververica.cdc改为 org.apache.flink.cdc,同时更改源代码中 import Package 路径。

4.2 用于 Flink SQL 作业的 Flink Source 连接器的重要更改
由于许可证与 Apache 2.0 License 不兼容,我们无法将以下连接器的 JDBC driver 包含在我们的二进制发布包中:

  • Db2
  • MySQL
  • Oracle
  • OceanBase

请手动将相应的 JDBC 驱动程序下载到 Flink 集群的 $FLINK_HOME/lib 目录中,或在使用 --jar 提交 YAML pipeline 时指定驱动程序的路径。如果您在使用 Flink SQL,请确保它们在 classpath 下。

4.3 作业 State 兼容性

由于以上不兼容的变更,使用 Flink CDC 3.1 以前版本保存的作业 State 无法在较新版本上恢复。因此,您需要在升级 Flink CDC 版本后进行一次无状态重启。

附上官方发布连接:

  • Apache Flink CDC 3.1.0 发布公告

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

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

相关文章

phpmyadmin漏洞汇总

phpmyadmin是一个非常常用的框架,所以学习它的常见漏洞是非常必要的。 参考大佬的文章进行自学:最全phpmyadmin漏洞汇总_phpmyadmin弱口令-CSDN博客 目录 phpmyadmin简介 查看phpmyadmin版本 漏洞及利用 万能密码登入 影响版本 漏洞POC 远程代码…

【传知代码】无监督动画中关节动画的运动表示(论文复现)

前言:在数字动画的广袤领域中,关节动画以其真实、流畅的运动表现,一直占据着举足轻重的地位。无论是电影中的震撼特效,还是游戏世界的角色互动,关节动画都以其细腻的运动表现,赋予虚拟世界以生动与活力。然…

Excel某列中有不连续的数据,怎么提取数据到新的列?

这里演示使用高级筛选的例子: 1.设置筛选条件 在D2单元格输入公式:COUNTA(A4)>0 这里有两个注意事项: *. 公式是设置在D2单元格,D1单元格保持为空, **. 为什么公式中选A4单元格,A列的第一个数据在A3…

CPU数据传送控制方式

引入 为了实现CPU与I/O设备信息交换的同步 无条件传送 示例1: 示例2: 程序查询方式 引入 工作过程 单个外设 多个外设 特点 中断传送方式 工作过程 特点 DMA 概述 DMAC功能 总线请求信号HOLD 总线请求响应信号HOLDA 工作过程 小结

景源畅信:新手做抖音运营难不难?

在这个信息爆炸的时代,社交媒体平台如抖音已经成为了人们日常生活中不可或缺的一部分。随着抖音的兴起,越来越多的人开始尝试进入这个领域,希望通过抖音运营实现自己的价值。然而,对于新手来说,抖音运营是否真的容易呢…

文心智能体大赛:情深智导

情深智导 概述限制澄清个性化 预览体验 概述 情深向导,致力于为您和您的孩子提供科学、个性化的情感支持与指导。无论您在家庭教育上遇到什么困惑,或是想了解孩子的内心世界,我都会在您身边,与您共同探索,助力亲子关系…

keepalived交叉编译

前言 Keepalived可以实现对服务器的健康检查,当主服务器出现故障时,自动将服务切换到备份服务器上,确保服务的连续性,避免单点故障。它还可以管理一个虚拟 IP 地址,在主备服务器之间进行灵活切换,对外提供…

使用 Python 编程语言进行供应链分析

前言 要分析一家公司的供应链,我们需要供应链不同阶段的数据,如有关采购、制造、运输、库存管理、销售和客户人口统计的数据。我为这项任务找到了一个理想的数据集,其中包括一家时尚和美容初创公司的供应链数据。 1. 相关数据集 让我们导入…

打造坦克游戏:类方法的深入解析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:坦克游戏与类方法的结合 二、坦克类的属性与方法概述 1. 属性定义与初…

Modbus协议基础

文章目录 Modbus概述Modbus TCP/IP Modbus概述 Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的应用层总线协议。 为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施…

Ubuntu 安装 LibreOffice

1. 删除预安装的LibreOffice Ubuntu 和其他的 Linux 发行版带有预安装的 LibreOffice。这可能不是最新的,这是因为发行版有特定的发行周期。在进行新安装之前,你可以通过以下命令删除 Ubuntu 及其衍生发行版中的的旧版本。 sudo apt remove –purge li…

vs code怎么补全路径,怎么快捷输入文件路径

安装插件: 链接:https://marketplace.visualstudio.com/items?itemNamejakob101.RelativePath 使用 按住 Ctrl Shift H,弹出窗口,输入文件补全,回车就可以了 排除文件 如果你的项目下文件太多,它会…

基础—SQL—图形化界面工具的DataGrip使用(2)

一、回顾与引言 (1) 上次内容,博客讲到了DDL语句的数据库操作、表操作、表字段的操作的相关语法,然而之前都是在MySQL的命令行当中去操作演示的。这种方式可以用,但是使用的话,第一,在我们日常…

编译原理 期末复习笔记整理(上)

资料借鉴: 【编译原理】期末复习 零基础自学_哔哩哔哩_bilibili 编译原理笔记 第一章 引论 1.编译原理逻辑过程: 词法分析 语法分析 语义分析 中间代码生成 编译代码生成 2.词法分析 任务: 输入源程序,对…

解决 fatal: Not a git repository (or any of the parent directories): .git 问题

解决方法:在命令行 输入 git init 然后回车就好了

全面解析Java.lang.ClassCastException异常

全面解析Java.lang.ClassCastException异常 全面解析Java.lang.ClassCastException异常:解决方案与最佳实践 🚀📚摘要引言1. 什么是Java.lang.ClassCastException?代码示例 2. 报错原因2.1 类型不兼容2.2 泛型类型擦除2.3 接口和实…

02 FreeRTOS 任务

1、创建任务函数 1.1 动态内存的使用 在之前我们如果要创建一个与学生有关的任务,我们会定义: //打印50个学生的信息 char name[50][100]; int age[50]; int sex[50]; //1表示男,0表示女 int score[50]; 如果之后要对其进行修改会非常麻烦&…

使用稀疏约束水平集算法对MR图像中的脑肿瘤进行分割| 文献速递-深度学习肿瘤自动分割

Title 题目 Brain tumor segmentation in MR images using a sparse constrained level set algorithm 使用稀疏约束水平集算法对MR图像中的脑肿瘤进行分割" 01 文献速递介绍 脑磁共振(MR)成像是成像患者脑结构的主要方法,从MR图像…

最后7天,高考翻盘秘籍等你开启!

高考,这场关乎未来的考试,对于每一个学生来说都是一次严峻的挑战。随着倒计时的进行,无数考生和家长的焦虑和期待达到了顶点。在这个最后7天的关键时期,我们为即将参加高考的学生及其家长提供一份复习秘籍,帮助你们抓住…

rfid资产管理系统如何帮助医院管理耗材的

RFID资产管理系统可以帮助医院管理耗材,提高耗材管理的效率和准确性。以下是它可以发挥作用的几个方面: 1. 实时跟踪和定位:使用RFID标签附加在耗材上,可以实时跟踪和定位耗材的位置。医院可以通过系统查询耗材的实时位置&#xf…