【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.…...
金融租赁系统助力企业升级与风险管理的新篇章
内容概要 在当今的商业环境中,“金融租赁系统”可谓是企业成功的秘密武器。简单来说,这个系统就像一位聪明的财务顾问,帮助企业在资金和资源的运用上达到最优化。从设备采购到项目融资,它提供了一种灵活的方式,让企业…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
