Flink CDC 原理
简介
Flink CDC(Change Data Capture)是 Apache Flink 提供的一个变更数据捕获工具集。它可以监控数据库的变更,并将这些变更实时地以流的形式提供给下游系统,这些变更包括插入、更新和删除操作。
Flink CDC 适用于需要实时数据管道和数据流处理的场景,如实时数据分析、数据仓库更新、缓存同步、ETL 过程、微服务架构中的数据一致性等。
官网简介:
和Flink 什么区别?
Flink 是一个更通用的流处理平台,而 Flink CDC 是构建在 Flink 之上,专注于变更数据捕获和流式数据同步的工具集。
Apache Flink 是一个开源的流处理框架,用于实时数据流的处理和分析。Flink 提供了用于构建分布式流处理应用的丰富API,包括数据流编程模型、窗口操作、状态管理、时间语义等。Flink 能够以极高的吞吐量和低延迟运行复杂的数据分析任务,并且保证数据流的一致性和准确性。Flink 也支持批处理,因此它可以作为批处理和流处理的统一引擎。
Flink CDC 是 Flink 社区提供的变更数据捕获工具集,它允许用户捕获数据库的增量变化,并将这些变化实时地以流的形式提供给下游系统。Flink CDC 工具可以监控数据库的变更,并将这些变更作为事件流输出,这些事件流可以被 Flink 流处理作业所消费。
联系:
- Flink CDC 是基于 Flink 的生态系统构建的,它利用 Flink 的流处理能力来捕获和分发数据库的变更数据。
- Flink CDC 产生的变更数据流可以被 Flink 流处理作业直接消费,实现近实时的数据同步和流处理。
- Flink CDC 与 Flink 的集成提供了端到端的数据流解决方案,从数据源的变更捕获到数据的流式处理。
区别:
- 功能定位:Flink 是一个通用的流处理框架,适用于各种流处理和批处理场景。Flink CDC 专注于捕获和分发数据库的变更数据。
- 使用场景:Flink 可以用于构建广泛的数据处理应用,而 Flink CDC 主要用于数据同步、流式ETL、实时数据仓库等需要数据库变更捕获的场景。
- 实现细节:Flink CDC 利用了 Flink 的内部机制,如状态后端和检查点机制,来保证变更数据的一致性和准确性。但它为数据库变更捕获提供了特定的连接器和API。
特点
- 实时性:
- Flink CDC 利用数据库的日志文件(如 MySQL 的 binlog)来捕获数据变更事件,这意味着它可以几乎无延迟地获取到数据变化。
- 通过流处理框架 Apache Flink, 变更数据可以快速被处理和传输到下游系统,适合需要低延迟反应的业务场景。
- 支持多种数据库:
- 目前Flink CDC 支持广泛使用的关系型数据库如 MySQL,PostgreSQL, MongoDB,Oracle,SQL Server 等的支持。
- 这种广泛的支持使得 Flink CDC 可以适用于多种存储系统背景下的实时数据同步和分析需求。
- 容错性:
- 结合 Apache Flink 的状态管理和检查点机制(Checkpointing),Flink CDC 能够在发生故障时保证数据处理的一致性并恢复到正确状态。
- 这是企业级应用中非常重要的特征,确保了数据处理任务在面对硬件故障或网络问题时依然能够可靠运行。
- 灵活性与易用性:
- 用户可以通过简单配置就能启动一个CDC任务,无需编写复杂代码。
- 支持自定义Deserialization schema来解析变更事件,用户可以根据自己需求进行定制化开发。
- 扩展性:
- 由于基于 Apache Flink 实现,Flink CDC 自然继承了 Flink 的可伸缩架构。用户可以根据负载增加或减少任务节点。
- 支持动态表功能(Dynamic Table),允许用户在不停止现有应用程序情况下修改表结构。
- 集成性:
- 可以与Apache Kafka、Elasticsearch等其他大数据组件轻松集成,为复杂的大数据生态系统提供强大支撑。
- 提供了连接器(Connector)接口,使得将CDC与其他外部系统连接起来变得简单快捷。
- 开源社区活跃:
- 作为 Apache 软件基金会项目之一,Flink 和其CDC组件拥有活跃且庞大的开发者社区。这意味着问题和bug通常能够快速被响应和解决,并且不断有新功能被添加进来。
增量快照读取
Flink CDC的增量快照读取机制是在Flink CDC 2.x版本中引入的。这一机制允许Flink CDC以更高效的方式进行数据捕获,它通过将数据表分割成多个chunk(分片),并行地对这些chunk进行快照读取,从而提高了读取速度和整体性能。
- 并发读取:支持多个并发读取任务,提高了数据捕获的速度。
- Chunk级别的checkpoint:在每个chunk读取完成后进行一次checkpoint,提高了故障恢复的准确性和效率。
- 全量增量无锁读取算法:不需要数据库锁权限,降低了对数据库的依赖和权限要求。
此外,Flink CDC 2.x版本还引入了Exactly-Once语义,确保数据处理结果的精确一次性,并且支持动态加表和无主键表的处理。
在Flink CDC 2.3版本中,除了对MySQL CDC的优化,还增加了对Db2、MongoDB和Oracle CDC的支持,并且这些连接器也都接入了增量快照框架,从而提供了无锁读取、并行读取和断点续传的能力。
使用示例
假设你需要从 MySQL 数据库捕获变更,并将变更数据流转发到 Kafka。以下是一个使用 Flink CDC 的简单代码示例:
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.connector.jdbc.JdbcExecutionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import com.ververica.cdc.connectors.mysql.MySqlSource;
import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema;public class FlinkCdcDemo {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();MySqlSource<String> mySqlSource = MySqlSource.<String>builder().hostname("your-db-hostname").port(3306).databaseList("your-database-name").tableList("your-database-name.your-table-name") // 可以更精确地指定表名.username("your-db-user").password("your-db-password").deserializer(new JsonDebeziumDeserializationSchema()) // 使用 JSON 格式解析数据.build();DataStream<String> stream = env.fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source");stream.addSink(new FlinkKafkaProducer<String>("your-kafka-topic",new SimpleStringSchema(),PropertiesUtil.getKafkaProperties()));env.execute("Flink CDC MySQL to Kafka");}
}
原理
Flink CDC 的原理基于变更数据捕获(Change Data Capture)技术,其核心思想是监测并捕获数据库的增量变化,如新增、修改和删除操作,然后将这些变化实时地以流的形式提供给下游系统。
工作原理可以概括为以下几个步骤:
-
数据捕获:CDC 引擎通过 Source Connector 从数据源中捕获变更数据。这些变更数据可以是新增、更新、删除等操作对数据的修改,通常以日志形式存在于数据源中。
-
数据解析:CDC 引擎对捕获的变更数据进行解析,将其转换成 Flink 的数据流格式。这包括解析变更操作的类型、影响的数据记录以及具体的变更内容等信息。
-
数据转换:在解析的基础上,CDC 引擎可能会对变更数据进行一些额外的转换操作,以适应目标系统或处理逻辑的要求。例如,将数据库中的行数据转换成 Flink 中的数据流格式。
-
数据传输:转换后的数据流被发送到 Flink 流式处理框架中进行进一步的实时处理和分析。这可以包括各种流处理操作,如数据过滤、聚合、计算等。
-
数据写入:处理后的数据流最终被 Sink Connector 写入到目标系统或存储介质中。这可以是将数据写入到文件系统、数据库表、消息队列等,以供后续的查询、分析或其他用途。
MySQL CDC Connector 实现原理:
1、Flink 的 MySQL CDC Connector 使用 MySQL 的二进制日志(Binlog)来捕获数据变更。Binlog 是 MySQL 中记录对数据进行更改的二进制日志文件。
2、Connector 连接到 MySQL 的 Binlog,监控其中的变更事件。通过解析 Binlog,Connector 可以了解到数据库中发生的插入、更新和删除等操作。
3、Connector 将捕获到的变更事件转换为 Flink DataStream,使其成为 Flink 流处理应用程序的输入。
PostgreSQL CDC Connector 实现原理:
1、Flink 的 PostgreSQL CDC Connector 使用 PostgreSQL 的逻辑复制机制来捕获数据变更。
2、Connector 创建一个 PostgreSQL 的逻辑复制插槽(replication slot),然后订阅这个插槽以获取数据库中的变更事件。
3、通过逻辑复制插槽,Connector 可以获取到插入、更新和删除等操作的变更事件,并将其转换为 Flink DataStream。
Debezium Connector 实现原理:
1、Debezium 是一个独立的开源 CDC 连接器,支持多种数据库。Flink 可以通过 Flink 的 Kafka Connector 与 Debezium 集成。
2、Debezium 连接到数据库的事务日志,并将变更事件发送到 Apache Kafka 中。Flink 使用 Flink 的 Kafka Connector 从 Kafka 中读取这些变更事件。
3、通过与 Debezium 集成,Flink 能够实现对多种数据库的 CDC 支持,包括 MySQL、PostgreSQL、MongoDB等。
相关文章:

Flink CDC 原理
简介 Flink CDC(Change Data Capture)是 Apache Flink 提供的一个变更数据捕获工具集。它可以监控数据库的变更,并将这些变更实时地以流的形式提供给下游系统,这些变更包括插入、更新和删除操作。 Flink CDC 适用于需要实时数据…...

Axure网上超市用户端APP原型 (O2O生鲜电商/买菜到家/数字零售/京东到家/抖音超市领域)
作品概况 页面数量:共 100 页 源文件格式:rp格式,兼容 Axure RP 9/10,非程序软件无源代码 适用领域:O2O生鲜电商、网上超市、买菜到家、数字零售 作品特色 本作品为网上超市用户消费端Axure交互原型,属于…...
外包公司中能学到技术的都是那些人?
在外包公司能够有效学习并提升技术的人,通常具备以下特点和行为模式: 自我驱动力强:这类人有强烈的学习欲望和提升自我的动机,不依赖公司安排的培训,而是主动寻找学习资源,如在线课程、技术书籍、开源项目等…...

JavaEE初阶-多线程进阶2
文章目录 前言一、CAS1.1 CAS的概念1.2 原子类1.3 CAS的ABA问题 二、JUC中常用类2.1 Callable接口2.2 ReentrantLock(可重入)2.3 Semaphore信号量2.4 CountDownLatch类2.5 CopyOnWriteArrayList类2.6 ConcurrentHashMap 前言 对于多线程进阶的部分&…...
B/S和C/S框架
一、B/S框架 B/S框架是指Browser/Server框架,即基于浏览器和服务器的应用程序开发框架。在B/S架构中,用户通过浏览器(Browser)访问服务器(Server)上的应用程序或网站,而无需在用户端安装额外的客…...

机器学习中常用的几种距离——欧式、余弦等
目录 一、欧式距离(L2距离)二、曼哈顿距离(L1距离)三、汉明距离四、余弦相似度 一、欧式距离(L2距离) (1)二维空间的距离公式(三维空间的在这个基础上类推)&…...

2024 Google I/O Android 相关内容汇总
2024 Google I/O Android 相关内容汇总 本次 Google I/O 的核心虽然是 AI ,但是 Android 也是作为主要议题出现, Android 部分可以简单分为产品和开发相关内容,接下来主要介绍这两部分的相关更新。 重点开始开发相关,内容不少 产…...

# 从浅入深 学习 SpringCloud 微服务架构(十八)
从浅入深 学习 SpringCloud 微服务架构(十八) 一、开源配置中心 Apollo:概述 1、开源配置中心 Apollo Apollo -A reliable configuration management system Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理…...
在SQL Server中使用临时表与普通表的性能差异分析
在SQL Server中,临时表和普通表的性能确实存在差异,具体表现和影响因素如下: 临时表和普通表的区别 存储位置: 临时表:存储在tempdb数据库中,生命周期仅限于当前会话或批处理。当会话结束或批处理完成时&a…...

数据中台管理系统原型
数据中台是一个通用性的基础平台,适用于各类行业场景,数据中台包含多元数据汇聚、数据标准化、数据开发、数据共享、数据智能、数据资产管理等功能,助力企业数字化转型。 数据汇聚 数据汇聚是将不同系统、不同类型的多元源数据汇聚至目标数据…...

数据库练习
在数据库中创建一个表student,用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 1、向student表中添加一条新记录(记录中id字段的值为1,name字段的值为"monkey",…...

Rust学习笔记(上)
前言 笔记的内容主要参考与《Rust 程序设计语言》,一些也参考了《通过例子学 Rust》和《Rust语言圣经》。 Rust学习笔记分为上中下,其它两个地址在Rust学习笔记(中)和Rust学习笔记(下)。 编译与运行 Ru…...

【SRC实战】文件名回显导致反射型XSS,URL重定向
挖个洞先 https://mp.weixin.qq.com/s/hnrm-snkETuR-gqPOSnQXQ “ 以下漏洞均为实验靶场,如有雷同,纯属巧合 ” 01 — 漏洞证明 一、反射型XSS “ 文件名回显,能否触发XSS?” 1、灯塔扫到敏感文件,发现1.txt会在…...
mysql高版本导入低版本Unknown collation: utf8mb4_0900_ai_ci
MySQL数据库导入SQL报错 Unknown collation: ‘utf8mb4_0900_ai_ci‘ 错误原因:我本地的MySQL数据包版本为8.0的,而服务器上的MySQL版本为5.7,双方的版本不兼容,这样就导致我在本地写好的SQL无法在服务器上的MySQL上运行。 解决办…...

运筹说 第114期 | 其他排队模型简介
前面我们已经学习了一些排队模型,对排队系统有了基本认知,本期小编带大家继续来学习其他排队模型的内容。 一、有限源排队模型 顾客源为有限的这类排队问题的主要特征是顾客总数是有限的,如只有m个顾客。每个顾客来到系统中接受服务后仍回到…...

易基因: WGBS等揭示梨驯化和改良过程中DNA甲基化对果实成熟的作用机制 | 作物育种
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 梨(Pyrus ssp.,蔷薇科杏仁核亚科)是世界上最重要的温带水果作物之一。与野生梨相比,栽培梨的果实在许多形态特征上表现出显著变化…...

数据分析(二)——导入外部数据,导入Excel数据,CSV文件,txt文件,HTML网页,数据抽取,DataFrame对象的loc属性与iloc属性
一.导入外部数据 1.导入.xIs或.xIsx文件 pd.read_ excel(io,sheet_ name,header) 1.1常用参数说明 ●io:表示.xIs或.xIsx文件路径或类文件对象 ●sheet name:表示工作表,取值如下表所示 ●header:默认值为0,取第一行的值为列名,数据为除列…...
如何让Linux系统崩溃?
如何使 Linux 系统崩溃 警告 下面的代码行是 Bash shell 的一个简短而甜蜜的 fork 炸弹。分叉炸弹之所以有效,是因为它能够产生无限数量的进程。最终,Linux无法处理所有这些,并且会崩溃。 fork 炸弹的一大优点是你不需要 root 权限即可执行它…...
C# 实现邮件推送功能
🏆作者:科技、互联网行业优质创作者 🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 🏆欢迎关注我(Net数字智慧化基地),里面…...
企业微信私域营销:构建高效转化新引擎
在数字营销的大潮中,企业微信作为企业内部沟通协作的重要工具,也逐渐成为企业私域营销的重要战场。本文将带您深入了解企业微信私域营销的魅力,探讨如何构建高效转化的新引擎。 一、企业微信私域营销:为何重要? 企业微…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
P10909 [蓝桥杯 2024 国 B] 立定跳远
# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时࿰…...