【Flink】快速理解 FlinkCDC 2.0 原理
快速理解 FlinkCDC 2.0 原理
要详细理解 Flink CDC 原理可以看看这篇文章,讲得很详细:深入解析 Flink CDC 增量快照读取机制 (https://juejin.cn/post/7325370003192578075)。
FlnkCDC 2.0:
Flink 2.x 引入了增量快照读取机制,还带来了一些其他功能的改进。以下是对Flink 2.x的主要功能的介绍:
- 增量快照读取:Flink 2.x引入了增量快照读取机制,这是一种全新的数据读取方式。该机制支持并发读取和以chunk为粒度进行checkpoint。在增量快照读取过程中,Flink首先根据表的主键将其划分为多个块(chunk),然后将这些块分配给多个读取器并行读取数据。这一机制极大地提高了数据读取的效率。
- 精确一次性处理:Flink 2.x引入了Exactly-Once语义,确保数据处理结果的精确一次性。MySQL CDC 连接器是Flink的Source连接器,可以利用Flink的checkpoint机制来确保精确一次性处理。
- 动态加表:Flink 2.x支持动态加表,通过使用savepoint来复用之前作业的状态,解决了动态加表的问题。
- 无主键表的处理:Flink 2.x对无主键表的读取和处理进行了优化。在无主键表中,Flink可以通过一些额外的字段来识别数据记录的唯一性,从而实现准确的数据读取和处理。
通过 MysqlCDC 快速理解 FlinkCDC 2.0 原理
这里将 Mysql Binlog CDC 流程简单分成了六个阶段,通过这六个阶段可以应该大致了解 Flink CDC 原理。
Snapshot 准备阶段:
SourceEnumerator 根据配置从数据库中获取每张表主键的最大值,然后根据每张表主键最大值和配置的粒度大小分为若干个键值范围 Chunk,然后将 Chunk 和表名等信息封装成 MySqlSnapshotSplit,发送给多个 MysqlSourceReader。
Chunk 读取阶段:
MysqlSourceReader 创建 MySqlSnapshotSplitReadTask 快照读取任务, 任务通过 MySqlSnapshotSplit 的 Chunk 的键值范围从数据库中 SQL 查询并保存相关数据,查询数据前后还会记录 binlog 的偏移量,也就是 binlog 当前的位置,查询前的为低位偏移量,查询后的为高位高位偏移量,用于修正部分中途修改的数据。


Binlog Upsert 修正数据阶段:
SQL 获取在读取 Chunk 数据时 binlog 改动的数据, 也就是获取 binlog 低位到高位偏移量的修改的数据,如果修改的数据键值在 chunk 范围内,那么修正 chunk 范围内的数据,这里的修正只会修正读取 chunk 过程中的一部分变动数据,后面的 Binlog 阶段将会修正其他遗漏的变动数据。


Snapshot 完成并准备开启 Binlog 阶段:
Chunk 读取阶段 和 Binlog Upsert 阶段都完成后,将修正后的数据发送给下游,并将完成的 SplitId 以及每个 Chunk 读取过程中的 Binlog 高位偏移量发送给 SourceEnumerator。
SourceEnumerator 在所有快照数据读取完后,创建 MySqlBinlogSplit,并将 MySqlBinlogSplit 发送给 MysqlSourceReader。
MysqlSourceReader 收到 MySqlBinlogSplit 后,向 SourceEnumerator 请求 Binlog 元数据信息。
SourceEnumerator 将已完成的 SplitId 和高位偏移量封装成 Binlog 元数据中发送给 MysqlSourceReader。
Binlog 阶段:
MySqlSplitReader 开始读取 MySqlBinlogSplit, 它从 Binlog 元数据中读取所有已完成的 Chunk 信息和高位偏移量,开始从 Binlog 最低位偏移量读取并处理数据,处理数据时只需要处理读取的偏移量大于当前数据所在 Chunk 的高位偏移量的数据,原因如下:
假设有已完成的 SnapshotSplit 信息 ssp,它的 Chunk 范围为 (id1,id2), 偏移量高低位为 (lw1, hw1)。
这时读取 binlog 的键值在 Chunk(id1, id2) 范围内, 偏移量为 k,开始做对数据做以下判定:
偏移量 k < lw1 的数据, 这部分数据在之前快照读取 Chunk(id1, id2) 前已经对完成了数据的修改,而快照读取 Chunk(id1, id2) 时是已经修改后的数据,可以不用管。
偏移量 lw1 <= k <= hw1 的数据,这部分数据在之前快照读取 Chunk(id1, id2) 后的 binlogUpsert 操作里面,已经完成了对数据的修改,可以不用管。
偏移量 k > hw1的数据,说明在读完 ssp 后又对 Chunk(id1, id2) 范围数据进行修改了,需要修正数据。

Pure Binlog Phase 阶段:
当达到了所有已完成的 SnapshotSplit 中最大的高位偏移量后,将进入 Pure Binlog Phase阶段,这时将不会对 binlog 进行任何比较,将直接发送给下游。
引用:
深入解析 Flink CDC 增量快照读取机制: https://juejin.cn/post/7325370003192578075。
相关文章:
【Flink】快速理解 FlinkCDC 2.0 原理
快速理解 FlinkCDC 2.0 原理 要详细理解 Flink CDC 原理可以看看这篇文章,讲得很详细:深入解析 Flink CDC 增量快照读取机制 (https://juejin.cn/post/7325370003192578075)。 FlnkCDC 2.0: Flink 2.x 引入了增量快照读取机制,…...
使用R的数据包快速获取、调用各种地理数据
数据一直是科学研究绕不开的话题,为了方便快捷的获取各种地理数据,许多R包被开发出来,今天介绍一些方便快捷的数据R包。 rnaturalearth 包使 Natural Earth 数据可用。自然地球特征包括 1:10m、1:50m 和 1:…...
scrapy豆瓣爬虫增强-批量随机请求头
1.1 豆瓣爬虫增强,中间件随机请求头 1.2 清除原有的中间件,进行中间件测试 1.3 导入全新的中间件 1.4 运行爬虫,这个时候的请求头是固定的 1.5 强化对agent的输出,会舍弃输出cookie,使输出更明了 1.6 转移输出请求头位置 新增输出 造成这样问题的原因是Douban/Douban/settings…...
基于华为昇腾910B,实战InternLM个人小助手认知微调
本文将带领大家基于华为云 ModelArts,使用 XTuner 单卡微调一个 InternLM 个人小助手。 开源链接:(欢迎 star) https://github.com/InternLM/InternLM https://github.com/InternLM/xtuner XTuner 简介 XTuner 是一个高效、灵…...
Electron文件写入、读取(作用:公共全局变量,本地存储)
Electron文件写入、读取(作用:公共全局变量,本地存储) 使用Node.js的fs模块 也可以直接使用Node.js的fs模块来实现本地文件的读写操作 // electron/main.jsconst fs require(fs);// 写入文件localhost.txt fs.writeFileSync(lo…...
水体分割检测 包含YOLOV,COCO,VOC三种标记的数据集包含 857张图片
说明 水体分割检测指的是利用深度学习模型进行水体区域的分割和检测。YOLO(You Only Look Once)是一种流行的实时目标检测算法,其主要特点是速度快,适合于实时场景下的目标检测。 在水体分割检测中,可以使用YOLO算法来…...
Harbor安装、HTTPS配置、修改端口后不可访问?
Harbor安装、HTTPS配置、修改端口后不可访问? 大家好,我是秋意零。今天分享Harbor相关内容,安装部分可完全参考官方文档,写的也比较详细。 安装Harbor 官方文档:https://goharbor.io/docs/2.12.0/install-config/ …...
正定矩阵(Positive Definite Matrix)的定义与性质
正定矩阵(Positive Definite Matrix)的定义与性质 正定矩阵在优化、机器学习、信号处理等领域中有广泛应用。以下是其定义、几何解释及性质。 1. 定义 一个 n n n \times n nn 的实对称矩阵 A A A 是正定矩阵,当且仅当它满足以下等价条…...
React与Ant Design入门指南
创建基于React框架使用Ant Design组件库的技术文档时,我们需要涵盖从安装到使用的各个关键步骤。以下是一份简化的技术文档草稿,它旨在帮助开发者快速上手并开始构建界面。 React与Ant Design入门指南 1. 简介 Ant Design是一个致力于提供企业级UI设计…...
MAC卸载Vmware Fusion后无法再安装解决方案
MAC卸载Vmware Fusion后无法再安装解决方案 执行脚本 sudo rm -rf /Library/Application Support/VMware/VMware Fusion sudo rm -rf /Library/Application Support/VMware/Usbarb.rules sudo rm -rf /Library/Application Support/VMware Fusion sudo rm -rf /Library/Prefe…...
单点登录深入详解之技术方案总结
技术方案之CAS认证 概述 CAS 是耶鲁大学的开源项目,宗旨是为 web 应用系统提供一种可靠的单点登录解决方案。 CAS 从安全性角度来考虑设计,用户在 CAS 输入用户名和密码之后通过ticket进行认证,能够有效防止密码泄露。 CAS 广泛使用于传统应…...
数据库(MySQL黑马)
基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载:MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…...
HTML5+JavaScript实现消消乐游戏
HTML5JavaScript实现消消乐游戏 点击两个相邻的方块来交换它们位置。 如果交换后形成三个或更多相同图案的方块连成一线,这些方块会被消除。 消除后,上方的方块会下落填补空缺,顶部会生成新的方块。 每消除一个方块得10分。例如࿰…...
sin函数拟合
目录 一、 目的... 1 二、 模型设计... 1 2.1 输入与输出.... 1 2.2 隐藏层设计.... 1 2.3 优化算法与损失函数.... 1 2.4 神经网络结构.... 1 三、 训练... 1 3.1 数据生成.... 2 3.2 训练过程.... 2 3.3 训练参数与设置.... 2 四、 测试与分析... 2 4.1 选取不同激活函数....…...
设置Mysql5.6允许外网访问
设置mysql用户支持外网访问步骤: 需要使用root权限登录mysql,更新mysql.user表,设置指定用户的Host字段为%,默认一般为127.0.0.1或者localhost。 1.登录数据库 1 mysql -u root -p 输入密码 1 mysql> use mysql; 2.查询hos…...
【随笔】一次JS和python中的MD5加密的记录
// 使用CryptoJS进行MD5加密和Base64编码 const sign CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(CryptoJS.MD5(sign2encrypt).toString()));上面这段JS和下面这个python等价 def hash_and_encode(input_string):sign2encrypt input_string# 使用 hashlib 进行 …...
力扣 二叉树的中序遍历
用了递归遍历,关于树的经典例题。 题目 递归 常规做法即递归了,不会写也得背下来。递归可以大致理解方法调用自身,先写中序遍历递归的方法,递归一定要有递归出口,当遍历到节点为空时返回,即已经找到了。…...
uniapp学习(010-3 实现H5和安卓打包上线)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第114p-116p的内容 文章目录 H5配置文件设置开始打包上传代码 安卓设置模拟器启动设置基础配置设置图标启动界面…...
基于DHCP,ACL的通信
该问题为华为的学习资料 1.首先把所有的PC机全部设置为DHCP 2.配置地址 3.ospf 4.dhcp 5.acl AR1 dhcp en interface GigabitEthernet0/0/0ip address 192.168.1.254 255.255.255.0 dhcp select global interface GigabitEthernet0/0/1ip address 10.1.12.1 255.255.255.…...
金融租赁系统助力企业升级与风险管理的新篇章
内容概要 在当今的商业环境中,“金融租赁系统”可谓是企业成功的秘密武器。简单来说,这个系统就像一位聪明的财务顾问,帮助企业在资金和资源的运用上达到最优化。从设备采购到项目融资,它提供了一种灵活的方式,让企业…...
利用大语言模型实现数据自动标注:Autolabel 实战指南
1. 项目概述:用大模型自动标注数据,告别人工标注的苦差事 如果你做过机器学习项目,尤其是监督学习,那你一定对数据标注这个环节又爱又恨。爱的是,有了高质量标注数据,模型性能才有保障;恨的是&a…...
5大核心功能揭秘:GTA5线上小助手如何彻底改变你的洛圣都冒险体验
5大核心功能揭秘:GTA5线上小助手如何彻底改变你的洛圣都冒险体验 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否厌倦了在GTA5线上模式中花费数小时完成重复任务?是否希望…...
Python并发模型全景解析
Python并发模型全景解析:线程、协程、多进程与GIL深度实战 🐍 Python 的并发编程一直是个让人困惑的话题:GIL 是什么?什么时候用线程?什么时候用协程?什么时候用多进程?本文从底层原理到生产实战,彻底讲清楚 Python 的四种并发模型,附带性能对比测试和真实踩坑经验。…...
DICOM文件里除了图像,还藏了哪些信息?一份给开发者的隐私与元数据解析指南
DICOM文件里除了图像,还藏了哪些信息?一份给开发者的隐私与元数据解析指南 医疗影像数据是AI模型训练和医疗信息系统开发的重要基础,但许多开发者往往只关注图像像素本身,忽略了DICOM文件中蕴含的丰富元数据。这些元数据不仅包含关…...
Oracle数据库深度解析:从入门到精通的全面指南
在当今数据驱动的时代,数据库管理系统(DBMS)已成为企业信息化建设的核心。作为全球领先的商业数据库产品,Oracle数据库凭借其卓越的性能、高可用性和强大的扩展能力,长期占据市场主导地位。本文将为您带来一份从入门到…...
Windows风扇控制终极指南:5分钟学会FanControl智能调校
Windows风扇控制终极指南:5分钟学会FanControl智能调校 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...
Hive内部表 vs 外部表:选错一次,数据全丢?结合HDFS路径详解核心区别与选型指南
Hive内部表与外部表:数据安全与架构设计的深度抉择 在数据仓库与大数据分析领域,Hive作为构建在Hadoop之上的数据仓库工具,其表类型的选择往往被初学者视为简单的语法差异。然而,当生产环境中TB级的数据因为一个DROP TABLE命令而永…...
Claude规则引擎:结构化提示词管理与Prompt Engineering实战
1. 项目概述:一个规则引擎的诞生与价值 最近在社区里看到不少朋友在讨论如何更好地管理和复用与Claude这类大型语言模型交互时的提示词(Prompt)和规则集。我自己在长期使用过程中也深有体会:每次开启一个新对话,要么得…...
别再硬啃官方文档了!用CentOS 7和Stein版OpenStack,30分钟搞定最小化部署
30分钟极速部署OpenStack Stein版:CentOS 7实战指南 当第一次接触OpenStack时,许多开发者都会被其庞大的组件和复杂的官方文档吓退。作为云计算基础设施的基石,OpenStack确实有着陡峭的学习曲线。但今天,我将带你用CentOS 7和Stei…...
