Apache Flink CDC 3.1.0版本知识学习

news2024/9/20 3:36:37

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.tbl1
    projection: id, age, weight, height, weight / (height * height) as bmi
    filter: 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: kafka
  properties.bootstrap.servers: PLAINTEXT://localhost:62510
  value.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: paimon
  catalog.properties.metastore: filesystem
  catalog.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.coloradmin.cn/o/1685986.html

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

相关文章

首都师范大学聘请旅美经济学家向凌云为客座教授

2024年4月17日,首都师范大学客座教授聘任仪式在首都师范大学资源环境与旅游学院举行。首都师范大学资源环境与旅游学院院长吕拉昌主持了仪式,并为旅美经济学家向凌云教授颁发了聘书。 吕拉昌院长指出,要贯彻教育部产学研一体化战略&#xff0…

2024年电工杯数学建模A题思路分享 - 园区微电网风光储协调优化配置

# 1 赛题 A 题: 园区微电网风光储协调优化配置 园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的 负荷占比,需配置较高比例的风光发电装机容量,但由于园区负荷与风光发电功 率时序不匹配, 可能导致…

C语言-牛客-实现四舍五入

欢迎来到Harper.Lee的学习小世界! 博主主页传送门:Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦! 本篇博客总结C语言刷题的相关笔记~~~~ #牛客–实现四舍五入 题目描述:随机输入浮点数,输出四舍五入后的整数…

Windows安全应急--反隐身术

NO.1 dir命令 首先做个演示,把演示01这个文件夹隐藏起来, 在文件夹上是看不到了, 我们可以使用dir命令查看, NO.2 文件夹选项–显示隐藏 这个是非常常规的了, 这里不做过多介绍 有些隐藏文件很顽固,上面…

关于智慧校园安全用电监测系统的设计

人生人身安全是大家关注的话题,2019年12月中国消防统计近五年发生在全国学生宿舍的火灾2314起(中国消防2019.12.应急管理部消防救援局官方微博),违规电器是引发火灾的主因。如果在各寝室安装智能用电监测器实时监督线路参数&#…

离散数学--图论

目录 1.简单概念 2.握手定理 3.点割集 4.边割集 5.点连通度和边连通度 6.Dijstra算法&&最短路径 7.有向图的连通性 8.图的矩阵表示 9.欧拉图问题 10.哈密尔顿图 1.简单概念 (1)这个里面的完全图比较重要,完全图是例如k3,k5这…

xcode配置快速打开终端命令行工具教程

以往我们使用idea编辑器或者vscode编辑器的时候,我们可以快速的在编辑器下面打开终端进行相关的操作,但是在xcode里面却没有这么方便的功能按钮,真的不是很习惯,所以这次就来给xcode配置这么一个方便的功能。 idea的Terminal 这…

AHPPEBot:基于表型和姿态估计的自主番茄采摘机器人

论文:AHPPEBot: Autonomous Robot for Tomato Harvesting based on Phenotyping and Pose Estimation 作者:Xingxu Li, Nan Ma, Yiheng Han, Shun Yang, Siyi Zheng 收录:ICRA2024 编辑:东岸因为一点人工一点智能 AHPPEBot&am…

NLP(16)--生成式任务

前言 仅记录学习过程,有问题欢迎讨论 输入输出均为不定长序列(seq2seq)自回归语言模型: x 为 str[start : end ]; y为 [start1 : end 1] 同时训练多个字,逐字计算交叉熵 encode-decode结构: Encoder将输…

v-cloak 用于在 Vue 实例渲染完成之前隐藏绑定的元素

如果你是后端开发者&#xff08;php&#xff09;&#xff0c;在接触一些vue2开发的后台时&#xff0c;会发现有这段代码&#xff1a; # CDN <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> # 或 <script src"https://cd…

bclinux基于欧拉(BigCloud Enterprise Linux For Euler)下安装mysql5.7

第一步&#xff1a;下载mysql5.7的rpm安装包 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 第二步&#xff1a;上传mysql安装包到Centos7的下 第三步&#xff1a;检查是否已经安装了mysql或者mariadb&#xff08;centos7默认安装&#xff09;&#xff0c;如已…

《intel开发手册卷3》读书笔记2

IA-32架构的内存管理分为两个部分&#xff1a;分段和分页。分段提供了一种隔离每个进程 或者任务代码、数据和栈模块的机制,保证多个进程或者任务能够在同一个处理器上运 行而不会互相干扰。分页机制实现了传统请求调页的虚拟内存系统&#xff0c;在这种系统中&#xff0c; 程序…

Python 机器学习 基础 之 数据表示与特征工程 【分箱、离散化、线性模型与树 / 交互特征与多项式特征】的简单说明

Python 机器学习 基础 之 数据表示与特征工程 【分箱、离散化、线性模型与树 / 交互特征与多项式特征】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【分箱、离散化、线性模型与树 / 交互特征与多项式特征】的简单说明 一、简单介绍 二、分箱、离散化、线性…

【加密与解密(第四版)】第十七章笔记

第十八章 反跟踪技术 18.1 由BeginDebugged引发的蝴蝶效应 IsDebuggerPresent()函数读取当前进程PEB中的BeginDebugged标志 CheckRemoteDebuggerPresent() 反调试总结&#xff1a;https://bbs.kanxue.com/thread-225740.htm https://www.freebuf.com/articles/others-articl…

seata介绍及使用

什么是事务的ACID&#xff1f; 几种分布式事务解决方案&#xff1a; AT模式的二阶段提交&#xff1a; TCC模式的二阶段提交&#xff1a; 可靠消息最终一致性方案&#xff1a; SEATA部署&#xff1a; seata-server端下载&#xff1a; 修改seata/conf/file.conf配置文件&#xff…

各种各样的可视化流程图样式,大量案例来袭,设计不愁了。

在设计可视化流程图时&#xff0c;应该注重流程的清晰性和易读性&#xff0c;使用简洁明了的图形和标签&#xff0c;避免过于复杂和混乱的布局&#xff0c;使用户能够直观地理解和跟踪流程的步骤和路径。同时&#xff0c;根据具体的需求和用户群体&#xff0c;可以灵活运用颜色…

小微企业管理系统如何选择等保服务?

小微企业在选择等保&#xff08;信息安全等级保护&#xff09;服务时&#xff0c;应当考虑以下几个关键点以确保既能符合法规要求&#xff0c;又能在成本效益上做出合理决策&#xff1a; 了解等保需求&#xff1a;首先&#xff0c;小微企业需要了解自身的业务性质和信息系统的重…

【软件测试】5.测试用例

目录 1.测试用例 1.1概念 1.2测试的要素 2.测试用例的万能公式 2.1常规思考逆向思维发散性思维 2.2万能公式 2.2.1功能测试 2.2.2界面测试 2.2.3性能测试 2.2.4兼容性测试 2.2.5易用性测试 2.2.6安全测试 2.3弱网测试 1.测试用例 1.1概念 什么是测试用例&#xf…

梳理 JavaScript 中空数组调用 every方法返回true 带来惊讶的问题

前言 人生总是在意外之中. 情况大概是这样的. 前两天版本上线以后, 无意中发现了一个bug, 虽然不是很大, 为了不让用户使用时感觉到问题. 还是对着一个小小的bug进行了修复, 并重新在上线一次, 虽然问题不大, 但带来的时间成本还是存在的. 以及上线后用户体验并不是很好. 问题…

ArrayList与LinkedList

内存 内存缓存 预先将数据写到容器等数据存储单元中&#xff0c;就是软件内存缓存。 内存缓存淘汰机制 FIFO&#xff08;First in ,First Out&#xff09;&#xff08;先进先出&#xff09; LFU (Least Frequently Used) (频繁的最后淘汰) LRU(Least Recently Used) &#…