flink cdc 原理解读

文章目录

快照阶段

1.根据主键或者非主键把数据分成chunk,每个并行,处理一个chunk,每个chunk,根据切分范围,先同步快照数据,然后要同步lw,到hw 期间的binglog数据,对快照数据进行修正。

增量阶段

1.统计所有chunk ,选择最小的lw作为增量binglog的起点。这里面有注意的一点,只有在已完成的快照分片范围内,并且偏移量高于 high watermark 的 binlog 事件才会被输出。

举例

假设有以下分片和对应的 high watermark:

分片 snapshot-split-0:[0, 1024),high watermark = HW0

分片 snapshot-split-1:[1024, 2048),high watermark = HW1

在这种情况下,增量数据的处理规则如下:

对于分片 snapshot-split-0,只有当 offset > HW0 且事件键在 [0, 1024) 时,增量事件才会输出。

对于分片 snapshot-split-1,只有当 offset > HW1 且事件键在 [1024, 2048) 时,增量事件才会输出。

总结

通过快照分片和 high watermark 机制,Flink CDC 实现了增量快照读取的精确控制。增量事件只有在已完成的快照分片范围内、并且偏移量超过 high watermark 时才会被输出,确保了增量数据与快照数据在顺序性和一致性上的无缝对接

问题
  • 为啥小于hw不输出,实际上小于hw,已经同步快照的阶段处理了
  • 如果遇到事务rallback,如何处理
bash 复制代码
BEGIN;
INSERT INTO orders (id, status) VALUES (1, 'NEW');
UPDATE orders SET status = 'SHIPPED' WHERE id = 1;
ROLLBACK;

在这段事务中,由于执行了 ROLLBACK,这两条操作不会影响数据库的最终状态。在 MySQL 的 binlog 日志中,这一事务会包括 BEGIN 和 ROLLBACK 标记,而不会有 COMMIT 标记。

在 Flink CDC 中的处理流程如下:

读取到 BEGIN 标记后,将该事务视为暂存状态,并缓存该事务的所有变更数据。

读取 INSERT 和 UPDATE 操作,并暂时存储这些变更记录,等待后续的事务提交。

读取到 ROLLBACK 标记后,丢弃当前事务的所有变更数据,并清除缓存,确保这两条未提交的变更不会输出到下游系统。

相关推荐
风落无尘1 小时前
《智能重生:从垃圾堆到AI工程师》——第二章 概率与生存
大数据·人工智能
档案宝档案管理1 小时前
无缝对接财务软件,实现会计档案全流程自动化流转
大数据
juniperhan1 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
科研前沿2 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
Elastic 中国社区官方博客2 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官2 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
samFuB3 小时前
【数据集】分省农林牧渔总产值、农业总产值数据(2007-2024年)
大数据
云天AI实战派3 小时前
AI 智能体问题排查指南:ChatGPT、API 调用到 Agent 上线失灵的全流程修复手册
大数据·人工智能·python·chatgpt·aigc
m0_466525294 小时前
酷特AGI:从“自家试验田”到“全球输出”
大数据·人工智能·agi
市象4 小时前
AI带给TCL空调的头部假想
大数据·人工智能