【大数据】基于 Flink CDC 高效构建入湖通道

基于 Flink CDC 高效构建入湖通道

  • 1.Flink CDC 核心技术解析
  • 2.CDC 数据入湖入仓的挑战
    • 2.1 CDC 数据入湖架构
    • 2.2 CDC 数据 ETL 架构
  • 3.基于 Flink CDC 的入湖入仓方案
    • 3.1 Flink CDC 入湖入仓架构
    • 3.2 Flink CDC ETL 分析
    • 3.3 存储友好的写入设计
    • 3.4 Flink CDC 实现异构数据源集成
    • 3.5 Flink CDC 实现分库分表集成
  • 4.Flink CDC + Paimon 最佳实践
    • 4.1 社区实践
    • 4.2 内部实践
  • 5.Q & A

摘要:本文整理自阿里云 Flink 数据通道负责人、Flink CDC 开源社区负责人, Apache Flink PMC Member & Committer 徐榜江(雪尽),在 Streaming Lakehouse Meetup 的分享。

1.Flink CDC 核心技术解析

Flink CDC 是基于数据库日志的 CDC(Change Data Capture变化数据捕获)技术,实现了全增量一体化读取的数据集成框架。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。
在这里插入图片描述
如上图所示,数据库表里有历史的全量数据和实时写入的增量数据,Flink CDC 框架的能力就是在保证 Exactly-once 语义的情况下,将全量和增量数据 不丢不重 地同步到下游系统里。

Flink CDC 可以借助 Flink 丰富的上下游生态,目前 Flink CDC 自己上下游生态是非常完备的,比如 Flink CDC 具有丰富的数据源,如 MySQL、Oracle、MongoDB、OceanBase、TiDB、SqlServer,以及兼容 MySQL 协议的 MariaDB、PolarDB 等,写入的下游则更加丰富,支持写入 Kafka、Pulsar 消息队列,也支持写入 Hudi、Iceberg、Paimon 等数据湖,也支持写入各种数据仓库。
在这里插入图片描述
下面介绍下 Flink CDC 的社区发展。

在这里插入图片描述

  • 2020 年 7 月,Flink CDC 社区正式发起。
  • 2021 年 5 月,发布了 1.5 版本,可以支持 MySQL 和 Postgres。
  • 2021 年 8 月,发布了 2.0 版本,可以支持 MySQL CDC 实现增量快照算法。
  • 2023 年 11 月,发布了 2.3 版本,提供了增量快照框架。
  • 2023 年 6 月,发布 2.4 版本,实现主流数据源持续扩展,增量快照覆盖主流连接器。

今年 6 月社区发布了 Flink CDC 2.4 版本,可以通过下图的代码 commits 分布了解该版本的一些重点功能和改进。

在这里插入图片描述

如 MySQL 和 MongoDB 等受到大家的重点关注和贡献,PostgreSQL 和 OceanBase 相关的贡献也比较多。这期间一共有 32 位来自各个公司的贡献者参与到版本的开发中来,解决了 141 个 issue,合并近 100 个 PR

Flink CDC 2.4 版本的核心 feature 如下:

  • 新增 Vitess 数据源支持,这个数据源海外用户较多,国内用户很少,这个特性是来自海外的贡献者。
  • PostgreSQL 和 SQL Server 支持增量快照,可以实现高并发、无锁读取等高级特性。
  • MySQL CDC 支持非 PK 表,即支持无主键表。
  • OceanBase 支持 MySQL Mode 和 Oracle Mode。
  • 升级 Debezium 依赖的版本至 1.9.7.Final,修复多个已知问题。
  • Connector 版本兼容 Flink 1.13 至 1.17 多个版本。
  • 增量快照框架支持自动释放空闲 reader。

在这里插入图片描述
Flink CDC 在发布 2.4 版本后,增量快照支持矩阵如下图所示:

在这里插入图片描述
增量快照算法的核心优势 在数据比较大的全量阶段,可以实现并行读取;在写入比较少的增量阶段,可以单并发读取。比如图中的 Task2Task3 是全增量自动切换后,支持资源自动释放,整个切换过程是通过无锁算法实现的一致性切换。

另外,上图还能说明在一些经典的 TP 类型数据库与大数据系统存在一些鸿沟,比如由于大数据系统往往要处理包括历史数据的海量数据,但由于数据摄入工具的原因导致海量数据不能高效拉取过来,而 Flink CDC 能够很好地在这个鸿沟之上构建数据通道。

总结 Flink CDC 的增量快照框架有如下四个优点:

  • 支持并行读取,并行读取的好处是可以做水平扩容,即让用户扩展资源来提升读取效率。
  • 支持无锁读取,也就是无需对线上数据库加锁,对业务无入侵。
  • 支持全增量一体化,即全量和增量自动衔接,无需人工介入。
  • Exactly-once 语义,准确一次语义,同步过程中确保数据不丢不重。

2.CDC 数据入湖入仓的挑战

CDC 数据入湖入仓的挑战大概有以下几点:

  • 历史数据规模大,数据库历史数据规模大,超 100T+ 规模的历史业务数据。
  • 增量数据实时性要求高,数据库增量数据业务价值高,且价值随时间递减,需要实时处理。
  • 数据的保序性,CDC 数据的加工结果通常需要强调一致性语义,通常需要 ETL 工具支持全局保序。
  • Schema 动态变化,增量数据随时间增长,数据库中数据对应 Schema 会不断演进。

2.1 CDC 数据入湖架构

传统的架构一般分为两个部分,也就是把离线跟实时这两部分分开,这两部分所对应的架构具有其自身的技术特征和业务特性,也可能与公司的业务组织架构相关,比如离线和实时业务分属两个团队,自然会出现这种 Lambda 架构。

在这里插入图片描述
这种传统的方案具有一些弊端,比如数据实时性不够、同步链路割裂维护麻烦、组件多,引入消息队列带来的成本过大等等。

2.2 CDC 数据 ETL 架构

CDC 数据在入湖入仓之前,往往会有 ETL 的需求,即需要做数据清洗、大小写转换或是数据打宽等等。

在这里插入图片描述
在早期的一些架构中,会先进行采集、计算等数据加工,然后再将数据写入到下游的一些存储中。如上图所示,这种 ETL 架构的挑战有:

  • 组件很多,架构复杂,维护代价是比较高。
  • 全量和增量基本割裂,数据采集计算口径很难对齐。
  • 单并发读取全量数据,无法水平扩容。

3.基于 Flink CDC 的入湖入仓方案

介绍完传统的数据入湖入仓方案,再来看看更加简洁高效的 CDC 入湖入仓方案。

3.1 Flink CDC 入湖入仓架构

Flink CDC 入湖入仓的架构很简洁,如下图所示,比如 MySQL 到 Paimon 的入湖链路,只需要 Flink CDC 一个组件即可,不需要冗长的 Pipeline。

对比上文传统的入湖入仓架构,Flink CDC 架构有如下优势:

  • 不影响业务稳定性。这体现在全量数据只读一次。
  • 实时性好,支持分钟级别产出。
  • 全量 + 增量一体化,避免了手工操作。
  • 全量并发读取,高吞吐。
  • 链路短组件少,学习和运维成本低。

在这里插入图片描述

3.2 Flink CDC ETL 分析

Flink CDC 是依托 Flink 生态的引擎,CDC 数据接入后可以保证在数据库 CDC 数据的语义下对数据进行加工,比如对 CDC 数据做一些 Group By 等聚合和双流 Join 等打宽操作。

在这里插入图片描述
在这些操作中,用户只需要编写 Flink SQL,就能获得相当于在一个数表的物化视图上操作的体验,实现对数据库里全量和增量的数据进行 SQL 操作,这些操作只需要在 Flink SQL 里就能完整实现。这将 CDC 数据做 ETL 加工的门槛极大地降低,只需要用户会写 SQL 就可以实现。

下图为使用 Flink CDC 做 ETL 的架构图,在整个 Pipeline 中,只需要一个 Flink 组件就可以了。这种架构的的优势是:

  • 全增量一体化。
  • ETL 可以做到实时加工。
  • 支持并发读取。
  • 链路短组减少,维护成本低。

在这里插入图片描述

3.3 存储友好的写入设计

Flink CDC 在全量读取的设计中,尤其是增量快照框架,考虑到了很多方面,特别是对于数据切片这部分。充分考虑了数据的一致性和下游的存储特性。比如,Checkpoint 的粒度对于下游存储来讲是很关键因素,如果 Checkpoint 是一个表的粒度,那么一站表的全部数据是很大的,在 flush 或者 commit 的时候,内存里面就要 buffer 很多数据,这就对下游的 sink 节点的写入很不友好。

那么在增量快照框架中,将 Checkpoint 的粒度优化到分片级别,并且切片的大小是开放给用户配置的,用户可以配置一个分片(chunk)可以读取大概多少数据。通过这种细粒度的控制,下游 sink 节点的的写入变得更加友好,不会给内存太大压力。

在这里插入图片描述

3.4 Flink CDC 实现异构数据源集成

基于 Flink CDC 可以轻松实现异构数据源的集成。当数据库不止一种,针对不同的业务数据库,往往需要把这些库中的数据进行融合,这个时候只需要几行 Flink SQL 就能搞定。

在这里插入图片描述
如上图右侧所示,有些业务数据在 MySQL 里,有些数据在 PostgreSQL 里,用户需要做的就是写几行 Flink SQL,定义不同类型的 CDC 表,然后在这里面做一些 Join 再 insert 到结果表中即可。上图左侧展示的是产品表、订单表和物流表之间的打宽,这个也是在 Flink SQL 中就能完成,整个例子中,用户不需要理解 Postgres 的 slot 机制,也不用理解 MySQL Binlog 的机制,只需要理解 Flink SQL 的几个语法即可。

3.5 Flink CDC 实现分库分表集成

对于一些规模加大的业务系统,为了支持高并发请求,分库分表的种架构是非常常见的。Flink CDC 天然支持这种架构的数据表同步,用户只需要在 DDL 中填写满足库名、表名的正则表达式,就可以把满足该正则表达式的分库分表中的历史数据和增量数据同步到下游。

在这里插入图片描述
这个例子中,只需要写几行 Flink SQL,就能高效地实现分库分表的数据集成。

4.Flink CDC + Paimon 最佳实践

在介绍 Flink CDC + Paimon 的最佳实践之前,首先来介绍下 Paimon 的整体架构。

在这里插入图片描述
在这张图里,可以看到 Paimon 作为湖存储,CDC 是很重要的一部分。CDC 相当于给 Paimon 把一些数据库系统或是些日志系统里的做第一步的数据接入。

如上图所示,围绕 Paimon 构建的整个数湖仓链路中,数据的实时性是很高的,基本上可以满足近实时业务的需求;数据在各层之间的流动可以通过写 Flink SQL 实现;也可以通过写 Flink 或其他计算引擎将数据读取出来进行分析,是很开放的架构。另外,通过这个架构也可以发现,整个架构的还是比较简洁的,可以通过 Flink SQL 实现语义的统一,也能够保障数据的一致性。

4.1 社区实践

Paimon 社区在 CDC 的支持上,相较于其他开源社区,支持是非常完善的,提供了一系列高级功能支持,比如:

  • 支持 Schema Evolution。
  • 支持 自动建表,字段自动映射。
  • 一条命令行自动生成同步 Pipeline。

在这里插入图片描述
Paimon 也支持 MySQL 的整库同步,并且在整库同步作业中,提供了 Schema Evolution 的支持。此外,Paimon 也提供了针对 Kafka 消息队列中的数据同步支持,也支持整库同步。

总的来说,Paimon 社区对于 CDC 的集成功能是非常完备的。

4.2 内部实践

在阿里云内部,我们开发 CTAS / CDAS 语法来实现整库同步和 Schema Evolution 的支持。对比刚刚 Paimon 社区的实践,可以理解为,阿里云内部的实践是上一行 SQL 生成一个 Pipeline,两者所提供的核心功能是差不多的,如自动建表、自动映射等等。

在这里插入图片描述
在阿里云内部的实践中也包括 CDC 数据实时入湖入仓,日志数据实时入湖入仓和 CDC 数据 ETL 分析等等。通过 CTAS 和 CDAS 的⼀⾏语法,就可以实现将 MySQL 或 Kafka 数据的整库同步到下游系统。

对于 CDC ETL 分析,阿里云内部实践时也有一些推荐的优化方案,如下图所示,用户可以先将数据同步到消息队列中,在下游有很多个实时作业消费同一张表的数据时,只需要读取一次数据库,这样对数据库的压力会大大减少。

在这里插入图片描述

5.Q & A

CDC 如果可以在不同系统之间移动,我们在开发的过程中有一个需求,就是数据在 IP 端会有挪到 PP 里面的需求,MySQL CDC 在这方面是否会有支持?

目前如果数据不需要支持 Schema Evolution,是可以实现这个需求的;如果数据需要支持 Schema Evolution,那么需要利用 Binlog 的机制来协助实现。

请问 Flink CDC 和 Paimon CDC 的区别是什么?Paimon CDC 是通过 Flink CDC 实现的么?

Paimon 读取外部数据库的 CDC 数据能力是通过 Flink CDC 实现的,此外 Paimon 自己的表是可以产生 CDC 数据的,也就是说给 Paimon 输入的数据可以是 MySQL CDC 产生的数据,另外一方面 Paimon 表自己也会产生属于该表的 CDC 数据。

在我们使用 CDAS 或 CTAS,对表结构变更是实时的吗?还是在 Checkpoint 里进行的?

目前已有实践都是实时的,不会依赖 Checkpoint 机制。因为依赖 Checkpoint 机制就可能产生一个问题,即 Checkpoint 上需要消耗几分钟的调整时间,这对于 CDC 数据场景来讲是不足以接受的。

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

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

相关文章

UI库DHTMLX Suite v8.2发布全新表单组件,让Web表单实现高度可定制!

DHTMLX Suite v8.2日前已正式发布,此版本的核心是DHTMLX Form,这个小部件接收了4个备受期待的新控件,如Fieldset、Avatar、Toggle和ToggleGroup。官方技术团队还为Grid和TreeGrid小部件中的页眉/页脚工具提示提供了一系列新的配置选项等。 在…

Unity和C#游戏编程入门:创建迷宫小球游戏示例

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 当涉及到Unity和C#游戏编…

【软件测试】Postman中变量的使用

Postman中可设置的变量类型有全局变量,环境变量,集合变量,数据变量及局部变量。区别则是各变量作用域不同,全局变量适用于所有集合,环境变量适用于当前所选环境(所有集合中均可使用不同环境变量&#xff09…

Vscode 快速下载

https://vscode.cdn.azure.cn/stable/8b617bd08fd9e3fc94d14adb8d358b56e3f72314/VSCodeUserSetup-x64-1.82.0.exe https://vscode.cdn.azure.cn/------>镜像,将官网的下载地址复制过来,stable开始拼接到后面

配置远程访问:让外部网络用户能够使用公司内部的OA办公系统

文章目录 前言1. 确认在内网下能够使用IP端口号登录OA办公系统2. 安装cpolar内网穿透3. 创建隧道映射内网OA系统服务端口4. 实现外网访问公司内网OA系统总结 前言 现在大部分公司都会在公司内网搭建使用自己的办公管理系统,如OA、ERP、金蝶等,员工只需要…

SpringBoot 拦截org.thymeleaf.exceptions.TemplateInputException异常

SpringBoot 拦截thymeleaf异常 org.thymeleaf.exceptions.TemplateInputException异常 org.thymeleaf.exceptions.TemplateProcessingE xception: Could not parse as each: "message : xxx " (template: “xxxx” - line xx, col xx) thymeleaf异常复现 你是故意的…

数据结构:线性表之-循环双向链表(万字详解)

目录 基本概念 1,什么是双向链表 2,与单向链表的区别 双向链表详解 功能展示: 1. 定义链表 2,创建双向链表 3,初始化链表 4,尾插 5,头插 6,尾删 判断链表是否被删空 尾删代码 7&a…

pdf文件过大如何缩小上传?pdf压缩跟我学

在我们日常工作和生活中,经常会遇到PDF文件过大的问题,给文件传输和存储带来了很大的不便。那么,如何缩小PDF文件大小以便上传呢?下面就给大家分享几个压缩方法,一起来了解下PDF文件压缩方法吧~ 方法一:嗨格…

斐波那契堆——怎么发明一种非常聪明的数据结构——学习笔记

我是目录 0. 前言1. Fibonacci Heap介绍1.1 简单回顾堆和优先队列1.2 二项树1.3 二项堆 2. 那怎么推导出Fibonacci Heap?2.1 实现GetMin2.2 实现Insert2.3 实现ExtractMin2.4 实现DecreaseKey2.5 关键部分 3. 那么,和斐波那契数列有什么关系?…

(10)(10.9) 术语表(一)

文章目录 前言 1 2.4Ghz 2 AGL 3 AHRS 4 APM 5 AMA 6 Arduino 7 APM (AutoPilot Mega) 8 ATC 9 Copter 10 Plane 11 Rover 12 BEC 13 Bootloader 14 COA 15 DCM 16 Eagle file 17 ESC 18 Firmware 19 FPV 20 FTDI 前言 !Note 术语表未编入索…

2023最新计算机信息管理毕设选题分享

文章目录 0 前言1 java web 管理系统 毕设选题2 java web 平台/业务系统 毕设选题3 游戏设计、动画设计类 毕设选题 (适合数媒的同学)4 算法开发5 数据挖掘 毕设选题6 大数据处理、云计算、区块链 毕设选题7 网络安全 毕设选题8 通信类/网络工程 毕设选题9 嵌入式 毕设选题10 开…

C#__基本的读写文件方式

// 代码注释 class Program{/// <summary>/// Path类&#xff1a;/// 不能实例化&#xff1b;提供了一些静态方法&#xff0c;更容易对路径名执行操作&#xff1b;(有兴趣可以自行了解)/// /// 读写文件&#xff1a;File类/// </summary>/// <param name"…

三、视频设备的枚举以及插拔检测

一、前言 本章主要讲述&#xff0c;如何获取设备名称以及guid&#xff0c;采集设备的采集格式识别&#xff0c;设备的插拔 设备列表以及属性的获取使用的directshow(后续的MediaFoundation无法获取OBS摄像头) 设备的插拔使用的是QT 捕获系统消息&#xff0c;捕获到设备插拔后&a…

BLE架构与开源协议栈

BLE架构&#xff1a; 简单来说&#xff0c;BLE协议栈可以分成三个部分&#xff0c;主机(host)程序&#xff0c;控制器(controller)程序&#xff0c;主机控制器接口(HCI)。如果再加上底层射频硬件和顶层用户程序&#xff0c;则构成了完整的BLE协议&#xff0c;如下图所示&#…

快讯 | ALVA 荣获首届“格物杯”联通物联网应用创新大赛复赛一等奖!

8 月 7 日&#xff0c;“物聚龙江 智联百业”物联网创新发展合作交流暨首届“格物杯”联通物联网应用创新大赛企业赛道复赛 (赛区四)在哈尔滨举办。 ALVA Systems 凭借智能远程协助平台—— ALVA Rainbow 在近 50 家企业中脱颖而出&#xff0c;荣获首届“格物杯”联通物联网应…

C#开发的OpenRA游戏之调试菜单1

C#开发的OpenRA游戏之调试菜单1 在开发一个游戏里,经常需要提供一些调试设置,以便快速地达到需要测试的阶段,否则按正常游戏的进程,就会需要比较久的时间,这样浪费开发人员的时间。 在OpenRA提供一个调试菜单,它就是在下面的界面里: 这个菜单叫做 Debug Menu,当玩家点…

mybatis初体验(细节满满)

1.创建数据表&#xff08;库名为&#xff1a;mayikt&#xff09; CREATE TABLE mayikt_user (id int NOT NULL AUTO_INCREMENT,username varchar(20) DEFAULT NULL,userpwd varchar(20) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT9 DEFAULT CHARSETutf8mb3…

Eclipse 安装串口终端工具

Eclipse已集成串口终端显示&#xff0c;只需要我们自己下载安装即可使用。使用SSH连接也差不多。 查看eclipse版本信息 help->About Eclipse 查看version&#xff0c;我的是4.7.3a&#xff0c;记住代号&#xff0c;我的是“Oxygen”,下面有用。 安装eclipse自带的“Termin…

GE IS220PAICH2A 336A4940CSP11 数字量输入模块产品应用领域

GE IS220PAICH2A 336A4940CSP11 是一款数字量输入模块&#xff0c;通常用于工业自动化和控制系统中&#xff0c;用于监测和采集数字输入信号。这种类型的模块可以在各种应用领域中发挥作用&#xff0c;以下是一些可能的应用领域&#xff1a; 工业过程控制&#xff1a; GE IS220…

优思学院|精益生产与柔性制造:现代制造业的双重理念

现代制造业正不断演进&#xff0c;出现了许多新的生产理念和方法。在这其中&#xff0c;精益生产和柔性制造是两个引人注目且重要的理念。这两者不仅对企业的生产流程产生了深远的影响&#xff0c;还在提高效率、适应市场需求方面发挥着关键作用。 理念背景和核心原则 精益生…