Flink-CDC解析(第47天)

news2024/11/22 21:58:51

前言

本文主要概述了Flink-CDC.

1. CDC 概述

1.1 什么是CDC?

CDC是(Change Data Capture 变更数据获取)的简称 ,在广义的概念上,只要是能捕获数据变更的技术,都可以称之为 CDC。
核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT、更新UPDATE、删除DELETE等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。
CDC 技术的应用场景非常广泛:

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

1.2 CDC的实现机制

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

1) 基于主动查询的 CDC:

用户通常会在数据源表的某个字段中,保存上次更新的时间戳或版本号等信息,然后下游通过不断的查询和与上次的记录做对比,来确定数据是否有变动,是否需要同步。
特点:
 离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据;
 无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;
 持续的频繁查询对数据库的压力较大。
 不保障实时性,基于离线调度存在天然的延迟。

2) 基于事件接收CDC:

可以通过触发器(Trigger)或者日志(例如 Transaction log、Binary log、Write-ahead log 等)来实现。当数据源表发生变动时,会通过附加在表上的触发器或者 binlog 等途径,将操作记录下来。下游可以通过数据库底层的协议,订阅并消费这些事件,然后对数据库变动记录做重放,从而实现同步。
 实时消费日志,流处理,例如 MySQL 的 binlog 日志完整记录了数据库中的变更,可以把 binlog 文件当作流的数据源;
 保障数据一致性,因为 binlog 文件包含了所有历史变更明细;
 保障实时性,因为类似 binlog 的日志文件是可以流式消费的,提供的是实时数据。
基于查询的CDC 基于Binlog的CDC
在这里插入图片描述

经过以上对比,可以发现基于日志CDC 有以下这几种优势:

  1. 能够捕获所有数据的变化,捕获完整的变更记录。在异地容灾,数据备份等场景中得到广泛应用,如果是基于查询的 CDC 有可能导致两次查询的中间一部分数据丢失

  2. 每次 DML 操作均有记录无需像查询 CDC 这样发起全表扫描进行过滤,拥有更高的效率和性能,具有低延迟,不增加数据库负载的优势

  3. 无需入侵业务,业务解耦,无需更改业务模型
    1.3 常见的开源 CDC 方案

  4. 对比全量同步能力:
     基于查询或者日志的 CDC 方案基本都支持,除了 Canal(仅支持增量)。
     对比全量 + 增量同步的能力,只有 Flink CDC、Debezium、Oracle Goldengate 支持较好。

  5. 对比增量同步能力:
     基于日志的方式,可以很好的做到增量同步;
     而基于查询的方式是很难做到增量同步的。

  6. 从架构角度去看:
    该表将架构分为单机和分布式,这里的分布式架构不单纯体现在数据读取能力的水平扩展上,更重要的是在大数据场景下分布式系统接入能力。例如 Flink CDC 的数据入湖或者入仓的时候,下游通常是分布式的系统,如 Hive、HDFS、Iceberg、Hudi 等,那么从对接入分布式系统能力上看,Flink CDC 的架构能够很好地接入此类系统。

  7. 在数据转换 / 数据清洗能力上:
    当数据进入到 CDC 工具的时候是否能较方便的对数据做一些过滤或者清洗,甚至聚合。
     在 Flink CDC 上操作相当简单,可以通过 Flink SQL 去操作这些数据;
     DataX、Debezium 等则需要通过脚本或者模板去做,所以用户的使用门槛会比较高。

  8. 在生态扩展方面:
    这里指的是下游的一些数据库或者数据源的支持。Flink CDC 下游有丰富的 Connector,例如写入到 TiDB、MySQL、Pg、HBase、Kafka、ClickHouse 等常见的一些系统,也支持各种自定义 connector。

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

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

相关文章

【C语言】【数据结构】二分查找(数组的练习)

目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 (1)查找3(数组里面存在的数) (2)查找12(数组里面不存在的数) 三、代码实现 四、计算mid公式的优化 一、…

二阶段测试:

二阶段测试: 架构: 服务器类型部署组件ip地址DR1调度服务器 主(ha01)KeepalivedLVS-DR192.168.60.30DR2调度服务器 备 (ha02)KeepalivedLVS-DR192.168.60.40web1节点服务器 (slave01)NginxTomcatMySQL 备MHA managerMHA node192.…

Open3D 点云按xyz轴等距切片

目录 一、概述 1.1原理 1.2实现步骤 1.3应用 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2按x轴切片 3.3按y轴切片 3.4按z轴切片 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总&#xff…

计算机网络通信基础概念

目录 1、网络通信的本质 2、网络的发展 3、网络协议(TCP\IP协议) 3.1 协议实现通信的原理 3.2 协议的具体概念 3.3 协议的模型 4、数据链路层 5、网络协议栈和操作系统的关系 6、网络协议通信过程 6.1 通信过程的封装与解包 7、以太网通信…

助力樱桃智能自动化采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,从智能家居到自动驾驶,再到医疗健康,其影响力无处不在。然而,当我们把目光转向中国的农业领域时,一个令人惊讶的…

【AI】SpringCloudAlibaba AI 学习

Spring Cloud Alibaba AI 简介 Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上提供阿里云通义系列大模型全面适配,让用户在 5 分钟内开发基于通义大模型的 Java AI 应用。 官网: https://sca.aliyun.com/ https://sca.aliyun.co…

理解 HTTP 请求中 Query 和 Body 的异同

本文将深入探讨HTTP请求中的两个关键要素:查询参数(Query)和请求体(Body)。我们将阐明它们之间的差异,并讨论在何种情况下使用每一种。 HTTP 请求概述 HTTP 请求是客户端(如浏览器&#xff09…

知道秘密的人

一、力扣题目: 二、理论分析 由于 天数是一天一天变化的,用 数组的下标代表天数i, 数组中的 数据代表知道秘密在第i天的人数 假设在某个人在知道秘密的第3天开始传播,在第6天忘记,由于 第1天1个人发现了秘密 spread为能传播秘密的…

MATLAB-bode图编程

num[1 1];den [2 1];tf(num,den)bode(tf(num,den));hold on

【QT】TCP

目录 核心API 示例:服务器和客户端信息互发 服务器代码实现 第一步:创建QTcpServer对象的实例 第二步:绑定信号槽,处理新的连接 第三步:绑定并监听端口号 客户端代码实现 第一步:创建socket对象的实…

【计算机网络】WireShark和简单http抓包实验

一:实验目的 1:熟悉WireShark的安装流程和界面操作流程。 2:学会简单http的抓取和过滤,并分析导出结果。 二:实验仪器设备及软件 硬件: Windows 2019操作系统的计算机等。 软件:WireShark、…

智能PDF转markdown

嘿,各位技术大咖们,今天我要给大家带来一个超酷的项目——“智能PDF转Markdown”,这可是数字化办公的神器,基于Marker技术,让PDF文档秒变Markdown,轻松应对RAG知识库构建等任务的挑战! 打造了一…

Python | Leetcode Python题解之第299题猜数字游戏

题目: 题解: class Solution:def getHint(self, secret: str, guess: str) -> str:bulls 0cntS, cntG [0] * 10, [0] * 10for s, g in zip(secret, guess):if s g:bulls 1else:cntS[int(s)] 1cntG[int(g)] 1cows sum(min(s, g) for s, g in z…

学习笔记 韩顺平 零基础30天学会Java(2024.7.22)

P407 接口使用细节2 P407 接口课堂练习 对于最后一个的输出:B因为实现了A的接口,所以和继承一样,B可以访问A的变量 P409 接口VS继承 接口对单继承机制(是指只能继承一个类)进行了补充 也可以理解为,子类通过…

IndexError: list index out of range

IndexError: list index out of range 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 擅长.net、C、python开发, 如果遇到技术问题,即…

锅总介绍CNCF主要目标、全景图及发展历史

一、CNCF简介 云原生计算基金会(Cloud Native Computing Foundation,简称 CNCF)是一个成立于 2015 年的非营利性组织,隶属于 Linux 基金会。CNCF 的主要目标是通过开源软件推动云原生计算技术的发展和普及,帮助企业更…

【C语言篇】C语言数据类型和变量

文章目录 C语言数据类型和变量1. 数据类型介绍1.1 字符型1.2 整形1.3 浮点型1.4 布尔类型1.5 各种类型数据长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof表达式不计算 2. signed和unsigned3. 数据类型的取值范围4. 变量4.1变量的创建4.2 变量的分类 5.强制类型转换 C语…

Redis:快速键值存储的入门指南

一、什么是Redis? Redis,全称为Remote Dictionary Server,是一种开源的、高性能的键值(Key-Value)存储系统。与传统的关系型数据库不同,Redis将数据主要存储在内存中,因此能够提供极低延迟的数…

网络传输层——UDP与TCP

前言: 1.国际网络体系结构: OSI模型: open system interconnect 理论模型 1977 国际标准化组织 各种不同体系结构的计算机能在世界范围内互联成网。 应用层:要传输的数据信息,如文件传输,电子邮件等…