大数据Flink(一百二十一):Flink CDC基本介绍

文章目录

Flink CDC基本介绍

一、什么是CDC

二、CDC的实现机制

三、​​​​​​​​​​​​​​传统 CDC ETL 分析

四、​​​​​​​​​​​​​​基于 Flink CDC 的 ETL 分析

五、​​​​​​​​​​​​​​什么是 Flink CDC

六、​​​​​​​​​​​​​​Flink CDC 的功能特性

七、​​​​​​​​​​​​​​Flink CDC 技术的核心


Flink CDC基本介绍

一、什么是CDC

CDC 的全称是 Change Data Capture ,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。

CDC 技术的应用场景非常广泛:

  • 数据同步:用于数据备份,容灾;
  • 数据分发:一个数据源分发给多个下游系统;
  • 数据采集:面向数据仓库 / 数据湖的 ETL 数据集成,是非常重要的数据源。

 

二、​​​​​​​CDC的实现机制

CDC 的技术方案非常多,目前业界主流的实现机制可以分为两种:

基于主动查询的 CDC:

用户通常会在数据源表的某个字段中,保存上次更新的时间戳或版本号等信息,然后下游通过不断的查询和与上次的记录做对比,来确定数据是否有变动,是否需要同步。

特点:

  • 离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据;
  • 无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;
  • 持续的频繁查询对数据库的压力较大。
  • 不保障实时性,基于离线调度存在天然的延迟。

基于事件接收CDC:

可以通过触发器(Trigger)或者日志(例如 Transaction log、Binary log、Write-ahead log 等)来实现。当数据源表发生变动时,会通过附加在表上的触发器或者 binlog 等途径,将操作记录下来。下游可以通过数据库底层的协议,订阅并消费这些事件,然后对数据库变动记录做重放,从而实现同步。

  • 实时消费日志,流处理,例如 MySQL 的 binlog 日志完整记录了数据库中的变更,可以把 binlog 文件当作流的数据源;
  • 保障数据一致性,因为 binlog 文件包含了所有历史变更明细;
  • 保障实时性,因为类似 binlog 的日志文件是可以流式消费的,提供的是实时数据。

综合来看,事件接收模式整体在实时性、吞吐量方面占优,如果数据源是 MySQL、PostgreSQL、MongoDB 等常见的数据库实现,建议使用 Debezium来实现变更数据的捕获。如果使用的只有 MySQL,则还可以用 Canal。

 

三、​​​​​​​​​​​​​​传统 CDC ETL 分析

我们来看下传统 CDC 的 ETL 分析链路,如下图所示:

传统的基于 CDC 的 ETL 分析中,数据采集工具是必须的,国外用户常用 Debezium,国内用户常用阿里开源的 Canal,采集工具负责采集数据库的增量数据,一些采集工具也支持全量数据同步。采集到的数据一般输出到消息中间件如 Kafka,然后 Flink 计算引擎再去消费数据并写入到目的端,目的端可以是各种数据库、数据仓库、数据湖和消息队列。 

注意:Flink 提供了 changelog-json format,可以将 changelog 数据写入离线数仓(如 Hive); 对于消息队列(如 Kafka),Flink 支持将 changelog 通过 upsert-kafka connector 直接写入 Kafka 的 compacted topic 

官方一直在思考是否可以使用 Flink CDC 去替换上图中虚线框内的采集组件和消息队列,从而简化分析链路,降低维护成本。同时更少的组件也意味着数据时效性能够进一步提高。答案是可以的,于是就有了我们基于 Flink CDC 的 ETL 分析流程。

四、​​​​​​​​​​​​​​基于 Flink CDC 的 ETL 分析

在使用了 Flink CDC 之后,除了组件更少,维护更方便外,另一个优势是通过 Flink SQL 极大地降低了用户使用门槛,可以看下面的例子:

该例子是通过 Flink CDC 去同步数据库数据并写入到 TiDB,用户直接使用 Flink SQL 创建了产品和订单的 MySQL-CDC 表,然后对数据流进行 JOIN 加工,加工后直接写入到下游数据库。通过一个 Flink SQL 作业就完成了 CDC 的数据分析、加工和同步。

大家会发现这是一个纯 SQL 作业,这意味着只要会 SQL 的业务线同学都可以完成此类工作。与此同时,用户也可以利用 Flink SQL 提供的丰富语法进行数据清洗、分析和聚合。此外,利用 Flink SQL 双流 JOIN、维表 JOIN、UDTF 语法可以非常容易地完成数据打宽,以及各种业务逻辑加工。

而对于其他 CDC 工具(如 Debezium)来说,进行数据的清洗过滤都是非常困难的,更无法支持复杂的聚合和关联了。

五、​​​​​​​​​​​​​​什么是 Flink CDC

Flink CDC 基于数据库日志的 Change Data Caputre 技术,实现了全量和增量的一体化读取能力,并借助 Flink 优秀的管道能力和丰富的上下游生态,支持捕获多种数据库的变更,并将这些变更实时同步到下游存储。

目前,Flink CDC 的上游已经支持了 MySQL、MariaDB、PG、Oracle、MongoDB 等丰富的数据源,对 Oceanbase、TiDB、SQLServer 等数据库的支持也已经在社区的规划中。

Flink CDC 的下游则更加丰富,支持写入 Kafka、Pulsar 消息队列,也支持写入 Hudi、Iceberg 等数据湖,还支持写入各种数据仓库。

同时,通过 Flink SQL 原生支持的 Changelog 机制,可以让 CDC 数据的加工变得非常简单。用户可以通过 SQL 便能实现数据库全量和增量数据的清洗、打宽、聚合等操作,极大地降低了用户门槛。 此外, Flink DataStream API 支持用户编写代码实现自定义逻辑,给用户提供了深度定制业务的自由度。

 

六、​​​​​​​​​​​​​​Flink CDC 的功能特性

  1. 支持数据库级别的快照,读取全量数据,2.0版本可以支持不加锁的方式读取
  2. 支持 binlog,捕获增量数据
  3. Exactly-Once
  4. 支持 Flink DataStream API,不需要额外部署 Debezium 和 Kafka即可在一个 Flink 作业中完成变更数据的捕获和计算
  5. 支持 Flink Table/SQL API,可使用 SQL DDL 来创建 CDC Source 表,并对表中的数据进行查询。

七、​​​​​​​​​​​​​​Flink CDC 技术的核心

Flink CDC 技术的核心是支持将表中的全量数据和增量数据做实时一致性的同步与加工,让用户可以方便地获每张表的实时一致性快照。比如一张表中有历史的全量业务数据,也有增量的业务数据在源源不断写入,更新。Flink CDC 会实时抓取增量的更新记录,实时提供与数据库中一致性的快照,如果是更新记录,会更新已有数据。如果是插入记录,则会追加到已有数据,整个过程中,Flink CDC 提供了一致性保障,即不重不丢。 


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

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

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

相关文章

CCF202006_1

问题描述 试题编号&#xff1a;202006-1试题名称&#xff1a;线性分类器时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 题解&#xff1a; #include<bits/stdc.h>using namespace std; int n, m;struct Node {int x, y;char ch; }node[1010…

51单片机按键数码管(简单设计)

51单片机按键数码管是一个简单的设计项目&#xff0c;使用四位数码管进行显示&#xff0c;矩阵按键加独立按键输入&#xff0c;将读取到据显示在数码管上。 一、参考PCB图 二、参考代码 #include <reg51.h> // LED数码管引脚定义 sbit LED1 P2 ^ 0; sbit LED2 P2 ^ 1;…

spark读取数据性能提升

1. 背景 spark默认的jdbc只会用单task读取数据&#xff0c;读取大数据量时&#xff0c;效率低。 2. 解决方案 根据分区字段&#xff0c;如日期进行划分&#xff0c;增加task数量提升效率。 /*** 返回每个task按时间段划分的过滤语句* param startDate* param endDate* param …

基于Leaflet和天地图的直箭头标绘实战-源码分析

目录 前言 一、Leaflet的特种标绘库 1、特种标绘对象的定义 2、Plot基类定义 3、直线箭头的设计与实现 二、在天地图中进行对象绘制 1、引入天地图资源 2、标绘对象的调用时序 3、实际调用过程 三、总结 前言 在博客中介绍过geoman标绘的具体实现&#xff0c;使用Leaf…

Window Server 2019+ 安装 Docker

刚刚在等待下载的时候&#xff0c;发了篇文&#xff0c;然后发现直接下载docker用不了&#xff0c;看了官网说明发现&#xff1a;Docker 不支持Window Server!!!不要直接下载官网那里的安装包。 那个链接点进去了windows的指南&#xff0c;发现也有问题&#xff0c;给的脚本地…

数据结构:(OJ141)环形列表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

【数据类型】映射map

小明正在备考英语四级考试&#xff0c;但他的词典太厚了&#xff0c;他记不住哪个单词在哪里。 于是他准备开发一个可以直接找某单词在某页的应用。 但是&#xff0c;他不会做&#xff0c;整天十分烦恼。 好啦&#xff0c;进入正题&#xff0c;大家好&#xff0c;我是学霸小羊…

Kubernetes从零到精通(12-Ingress、Gateway API)

Ingress和Gateway API都是Kubernetes中用于管理外部访问集群服务的机制&#xff0c;但它们有不同的设计理念和适用场景。它们的基本原理是通过配置规则&#xff0c;将来自外部的网络流量路由到Kubernetes集群内部的服务上。 Ingress/Gateway API和Service Ingress/Gateway API…

Django后台管理复杂模型

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django框架…

ZLMediaKit Windows编译以及使用

1.运行ZLMediaKit 2.通过ffmpeg把视频源推流给ZLMediaKit 执行以下命令&#xff0c;将本地视频通过RTSP协议推流给ZLMediaKit。 ffmpeg -re -stream_loop -1 -i "D:\workplace\armgb\public\1.fileh264" -vcodec h264 -f rtsp rtsp://127.0.0.1/live/test 若想将本…

统信服务器操作系统【d版系统上Ansible工具】配置方法

在统信服务器操作系统d版本上进行安装Ansible工具的方法以及配置方法。 文章目录 准备环境功能描述安装与配置一、 安装ansible工具1. 直接 命令安装2. 验证安装结果3. 配置ssh免密登录二、Ansible使用1. 主机清单配置2. ansible命令3. ansible模块三、 playbook配置文件1. 执行…

Java 发布jar包到maven中央仓库(2024年9月保姆级教程)

文章目录 前言一、账号准备1. 注册登录账号2. 新建命名空间3. 验证命名空间4. 生成令牌5. 为 maven 设置令牌二、GPG准备1. 下载GPG2. 发布证书2.1 新建证书2.2 发布证书到服务器2.3 验证发布三、发布jar包到中央仓库1. 编辑项目pom文件2. 打包上传3. 发布jar包4. 搜索我们的ja…

【机器学习】任务五:葡萄酒和鸢尾花数据集分类任务

目录 1.实验基础知识 1.1 集成学习 &#xff08;1&#xff09;随机森林 &#xff08;2&#xff09;梯度提升决策树&#xff08;GBDT&#xff09; &#xff08;3&#xff09;XGBoost &#xff08;4&#xff09;LightGBM 1.2 参数优化 &#xff08;1&#xff09;网格搜索…

Java面试篇基础部分-Java线程池工作原理

线程池的出现,主要是用来管理一组线程的工作运行状态,这样可以方便JVM更好的利用CPU资源。 Java线程池的工作原理:JVM先根据用户的参数创建一定数量的可运行的线程任务,并且将这些任务放入到队列中,在线程创建之后,启动这些任务。 如果当线程数超过最大线程数,这个线程数…

WIFI路由器的套杆天线简谈

❝本次推文简单介绍下WIFI路由器的套杆天线。 路由器天线 路由器在这个万物互联的时代&#xff0c;想必大家对其都不陌生。随着科技的发展&#xff0c;常用的路由器上的天线也越来越多&#xff0c;那么问题来了&#xff1a;天线越多&#xff0c;信号越好吗&#xff1f;路由器…

视频转文字工具:开启视频内容深度挖掘的钥匙

图片里到文字要提取出来&#xff0c;现在有很多的工具&#xff0c;但是视频里的文字要提取出来&#xff0c;是不是就不那么好操作呢&#xff1f;并不是的&#xff0c;现在也有不少支持视频转文字的工具&#xff0c;这次我们就来介绍一些可以提高我们视频文字提取效率的工具吧。…

【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显示网格与隐式网格(中)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

[Redis][环境配置]详细讲解

目录 1.安装 && 简单配置2.文件目录说明3.客户端 1.安装 && 简单配置 Ubuntu下&#xff0c;直接使用sudo apt install redis -y即可支持远程连接&#xff1a;修改/etc/redis/redis.conf 将bind 127.0.0.1改为bing 0.0.0.0作为学习用途&#xff0c;可以将prote…

代码——IMX6UL烧录工具及其使用

一、简介 在此感谢正点原子官方提供的IMX6UL烧录代码&#xff0c;本篇是在正点原子给的代码基础上修改的&#xff0c;增加了些许功能&#xff0c;可根据自己的需求更改。此外代码难免有疏漏之处&#xff0c;还望见谅 二、源代码的使用 1,库和工具的安装 安装库和工具前&#x…

Datawhale X 南瓜书 task01学习笔记

机器学习三观 机器学习工程领先理论 what:什么是机器学习? 机器学习定义&#xff1a;研究关于“学习算法”(一类能从数据中学习出其背后潜在规律的算法)的一门学科PS:深度学习指的是&#xff1a;神经网络那一类学习算法&#xff0c;因此是机器学习的子集把深度学习单列出来…