Flink cdc3.0动态变更表结构——源码解析

Flink cdc3 上一篇Flink cdc3.0同步实例介绍了最新的一些功能和问题,本篇来看下新功能之一的动态变更表结构的具体实现。在 Flink 中,应用程序由流数据流组成,这些数据流是由用户定义的Operators进行转换。Flink CDC 3.0 框架中流动的数据类型被称为Event,代表外部系统产生的变更事件。每个事件都标有发生更改的表 ID。事件分为和,分别代表表结构和数据的变化。处理schema变更的Operators对应图中的。(以下代码使用Flink Release 3.0.0) 阅读详情
AI摘要

本文详细解析了FlinkCDC3.0中动态表结构变更的处理过程,包括接收SchemaChangeEvent、发起和处理schema变更请求、广播刷新事件、处理FlushEvent以及在sink端修改schema。

前言

上一篇Flink cdc3.0同步实例 介绍了最新的一些功能和问题,本篇来看下新功能之一的动态变更表结构的具体实现。
在 Flink 中,应用程序由流数据流组成,这些数据流是由用户定义的Operators进行转换。
在这里插入图片描述
Flink CDC 3.0 框架中流动的数据类型被称为Event,代表外部系统产生的变更事件。每个事件都标有发生更改的表 ID 。事件分为SchemaChangeEvent和DataChangeEvent,分别代表表结构和数据的变化。处理schema变更的Operators对应图中的SchemaOperator。
在这里插入图片描述
(以下代码使用Flink Release 3.0.0)

源码解析

1. 接收schema变更事件

我们以添加字段触发的AddColumnEvent为例,它实现了SchemaChangeEvent。 SchemaOperator 当接收到有AddColumnEvent 事件时,会在processElement 中调用handleSchemaChangeEvent处理。
在这里插入图片描述

2. 发起schema变更请求

说明下这里的response实际是直接返回的new SchemaChangeResponse(true), 由于构造的shouldSendFlushEvent 直接传入true, 所以后续也会进入if条件。我们接着requestSchemaChange 方法看
在这里插入图片描述
由于知道response是直接创建的已知结果,因此responseFuture.get() 也不会阻塞。我们接着来看toCoordinator.sendRequestToCoordinator(getOperatorID(), new SerializedValue<>(request));的实现
在这里插入图片描述

3. schema变更请求具体处理

通过几层的调用,上述变更请求会走到 SchemaRegistry 的handleCoordinationRequest(CoordinationRequest request),我们的请求是SchemaChangeRequest,所以会调用requestHandler.handleSchemaChangeRequest(schemaChangeRequest);
在这里插入图片描述
这里可以看到response 是直接创建的SchemaChangeResponse(true)。 接着schemaManager.applySchemaChange(request.getSchemaChangeEvent());注册新的schema。

在这里插入图片描述
另外还有个重点,在startToWaitForReleaseRequest方法中会重置responseFuture, 原本的response通过return返回了。而PendingSchemaChange中的response重置,主要就是为了等schema变更完成设计。(主线程会再次发起请求调用responseFuture.get() ,忽略这里会不理解后面为什么会阻塞)
在这里插入图片描述

4. 广播刷新事件并阻塞

回到第二部分,因为response是一个明确对象没有阻塞,返回后会直接广播FlushEvent 和 schemaChangeEvent(再次发起schemaChangeEvent不是很理解)。之后requestReleaseUpstream 请求调用responseFuture.get()会阻塞,因为response在第三步已经重置为new CompletableFuture<>(), 利用的1.8的特性。这也是收到变更事件后要保证sink端变更才能发放数据。
在这里插入图片描述

5. 处理FlushEvent

FlushEvent 由什么Operator处理,在官方架构图中其实没有指出,但是图标可以看出是通过sink端完成,我们可以找到DataSinkWriterOperator类,有对FlushEvent的处理。
在这里插入图片描述
实际调用SchemaRegistry::handleEventFromOperator方法,重点在requestHandler.flushSuccess(flushSuccessEvent.getTableId(), flushSuccessEvent.getSubtask());
在这里插入图片描述
其中applySchemaChange 就是在具体的sink端变更,下面会展开。 当变更完成后会执行waitFlushSuccess.getResponseFuture().complete(wrap(new ReleaseUpstreamResponse()));,实际就通知第4部分的response这里处理完了,可以正常放开数据流。
在这里插入图片描述

6. 修改sink端schema

每个sink端有自定义的metadataApplier,
在这里插入图片描述
我们以DorisMetadataApplier为例,applyAddColumnEvent 会构造addFieldSchema,然后在schemaChangeManager 中转换为对应的sql执行。
在这里插入图片描述

结尾

以上就是这两天对源码跟进的记录,后续思考使用local环境Debug中间过程。
flink cdc debug动态表结构变更

Flink cdc3.0同步实例(动态变更表结构、分库分表同步) 基于 Flink CDC 3.0 同步 MySQL 到 Doris ,来体验整库同步、表结构变更同步和分库分表同步等功能。 阅读详情

相关推荐

Flink CDC 3.0 详解

Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 于2023年12月7日重磅推出其全新的 3.0 版本,3.0版本的发布对 Flink CDC 而言具有里程碑的意义,自此 Flink CDC 从捕获数据变更的Flink 数据源正式迈向为以 Flink

奔跑的蜗牛的博客 2639

新一代实时数据集成框架 Flink CDC 3.0 —— 核心技术架构解析

本文整理自阿里云开源大数据平台吕宴全关于新一代实时数据集成框架 Flink CDC 3.0 的核心技术架构解析。

Ververica的博客 3137

Flink实时计算核心原理与工程实践:从Kafka到Elasticsearch全链路解析

实时计算是当前大数据处理的重要方向,流处理框架通过逐条处理数据实现毫秒级延迟,颠覆了传统批处理模式。Flink作为领先的流处理引擎,以状态管理、事件时间、水位线和checkpoint机制构建了完整的容错体系,支持Exactly-Once语义,适用于金融风控、实时数仓、用户行为分析等场景。在实际开发中,工程师常面临并行度设置、资源消耗控制、连接器异常排错等挑战。合理配置Flink SQL、合理使用CDC实现数据库变更实时捕获,并结合弹性扩缩容与状态TTL优化,能有效降低资源消耗。针对面试高频问题,理解JobM

cmff98425的博客 412

Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架

01FlinkCDC概述Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持了全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 社区发展迅速,在开源的三年时间里,社区已经吸引了 111...

Ververica的博客 5857

2026年轻量级CDC与流处理方案盘点:从Debezium到SeaTunnel

数据同步是实时数仓与数据集成的基础环节,而变更数据捕获(CDC)正是感知数据库增量变化的通用技术原理。传统基于日志的CDC通过解析binlog或WAL,能够在不侵入业务的前提下获取完整有序的变更事件,为下游流处理提供实时数据源。随着容器化与云原生普及,流处理链路不再一味追求重型架构,轻量级方案在中等业务规模下展现出更低运维成本与更高可维护性。Debezium Server以去Kafka的单进程形态简化采集部署,Flink CDC用SQL连接器降低开发门槛,SeaTunnel则通过插件化架构覆盖达梦、King

weixin_34166847的博客 347

cdc变更表结构步骤

db2采用cdc同步数据,当表结构需要发生变动时操作步骤

Flink cdc debug调试动态变更表结构

flink cdc debug动态变更表结构

yyoc97的专栏 4121

PX4 磁罗盘干扰分析

无人机上的电机电流会干扰无人机上搭载的磁罗盘,PX4官方提供了一些方式,通过分析飞行日志,判断电机是否对磁罗盘有严重影响。

Zecet的博客 3358

【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图

Flink CDC的Schema Evolution表结构演变的源码分析和流程图

lisacumt的专栏 2046

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9210

制造业与工业知识图谱应用

在全球数字化转型背景下,制造业面临创新周期缩短、质量管控精细化等挑战。知识图谱技术通过结构化表示工业知识,为智能制造提供关键技术支撑。工业知识图谱具有专业性强、多源异构数据融合、实时性要求高等特点,其构建流程涵盖本体设计、知识抽取与整合等环节。研究显示,知识图谱与大模型结合可提升工业场景的智能化水平,在设备故障诊断、供应链优化等领域具有显著应用价值。该技术有望成为制造业数字化转型的核心驱动力。

分享一些感兴趣的技术方面 1444

深度解析Flink CDC 3.0架构演进:从2.x到3.x的全面迁移指南

Flink CDC 3.0作为Apache Flink社区推出的新一代实时数据集成平台,彻底重构了数据变更捕获的实现范式。对于正在使用Flink CDC 2.x的技术架构师和资深开发者而言,理解从2.x到3.x的架构演进路径和迁移策略至关重要。本文将深入分析3.0版本的核心架构变革,提供从环境准备到生产验证的全方位迁移方案,帮助您平稳过渡到新一代CDC平台。 ## 3.0版本架构革命:从连接器到

gitblog_00884的博客 802

基于单片机的继电器参数测试系统设计

由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时继电器参数数据的同步控制;设计双极性反向比例输出电路,分别利用电极电阻对继电器两侧电压进行放大,实现继电器实时电压的检测。实验结果:以两组类型断电器为测试对象,分别连接示波器进行真实数据采集,在本文系统的应用下所得参数测试结果,与真实的数据相一致,具有实际应用效

weixin_45905610的博客 1439

Flink SQL篇,SQL实操、Flink Hive、CEP、CDC、GateWay

Flink SQL 篇82、Flink SQL有没有使用过?83、Flink被称作流批一体,从哪个版本开始,真正实现流批一体的?84、Flink SQL 使用哪种解析器?85、Calcite主要功能包含哪些?86、Flink SQL 处理流程说一下?87、Flink SQL包含哪些优化规则?88、Flink SQL中涉及到哪些operation?89、Flink Hive有没有使用过?90、Flink与Hive集成时都做了哪些操作?91、HiveCatalog类包含哪些方法?92、Flink SQL1.11

一个写湿的程序猿 4813

ThingsKit物联网平台产品管理之物模型

物模型是ThingsKit物联网平台为产品定义的数据模型,用于描述产品的功能。本文介绍物模型相关概念和使用限制。

云腾五洲官方博客 1174

玩转Docker | 使用Docker部署MediaCMS内容管理系统

玩转Docker | 使用Docker部署MediaCMS内容管理系统

qq_59334230的博客 2918

Flink CDC OceanBase 连接器:企业级实时数据同步的3个关键实践

- 问题反馈:通过 GitHub Issues 提交问题 - 技术交流:参与社区讨论和技术分享 通过本文的详细解析,您已经掌握了 Flink CDC OceanBase 连接器的核心原理、配置方法和最佳实践。在实际应用中,建议结合具体业务场景进行参数调优,并充分利用 Flink CDC 的监控和告警功能,确保数据同步任务的稳定运行。

gitblog_00661的博客 469

Python 爬虫实战:爬取电商平台商品信息(价格 / 销量 / 评价)

摘要:本文详细介绍基于Python的电商商品信息爬取技术方案,以京东商品详情页为例,对比分析静态(BeautifulSoup)和动态(Selenium)两种爬取方式的实现逻辑。静态爬取适合获取基础信息,而动态爬取可解决JS渲染数据的获取问题。文章包含完整的代码实现、反爬规避策略及数据存储方案,涵盖商品名称、价格、销量、评价等核心数据提取。同时强调爬虫的合规使用,提供扩展方向建议,为电商数据采集提供实用技术参考。

2503_91057718的博客 2023

3个实战技巧:解决Flink CDC生产环境的典型数据集成问题

你正在使用Flink CDC进行数据同步,却遇到了这些头疼问题:**全量数据迁移太慢**、**增量变更丢失**、**多源数据一致性难以保证**。别担心,这篇文章将带你从"能用"到"用好",彻底解决这些生产环境中的典型问题。 ## 🚀 快速开始:10分钟搭建实时数据同步 ### 问题场景:MySQL数据如何实时同步到分析数据库? 假设你有一个电商系统,订单数据存储在MySQL中,需要实时同步

gitblog_00341的博客 305

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Flink 面试题-sql

Flink SQL篇,SQL实操、Flink Hive、CEP、CDC、GateWay Flink源码篇,作业提交流程、作业调度流程、作业内部转换流程图 Flink核心篇,四大基石、容错机制、广播、反压、序列化、内存管理、资源管理 Flink基础篇,基本概念、设计理念、架构模型、编程模型、常用算子 1、Flink SQL有没有使用过? 2、Flink被称作流批一体,从哪个版本开始,真正实现流批一体的? 3、Flink SQL 使用哪种解析器? 4、Calcite主要功能包含哪些? 5、Fl.

张伟的专栏 2925

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Flink CDC 3.x架构革命:企业级实时数据集成平台的性能突破与迁移实战

Apache Flink CDC 3.x版本代表了实时数据集成领域的一次重大架构演进,为企业级数据处理平台带来了革命性的性能突破和架构优化。作为Apache Flink生态中最重要的实时数据集成工具,Flink CDC 3.x通过声明式配置、统一路由引擎和增强的Schema管理能力,彻底改变了传统CDC作业的开发与运维模式。本文将深入分析从2.x到3.x的架构演进逻辑、技术价值实现路径,并为技术决

gitblog_00951的博客 451

Flink 1.20 实战:零代码配置实现 MySQL 百表到 ClickHouse 实时同步

基于 Flink 1.20 + Flink CDC 3.5,用配置驱动替代重复编码,一套代码搞定 MySQL 百表到 ClickHouse 实时同步。支持正则匹配/精确映射、运行时动态发现新表、启动时自动加载表结构建立类型缓存,并自动处理 Debezium 对 DECIMAL(Base64)、DATETIME(毫秒)、DATE(天数)的编码,用 ReplacingMergeTree + Checkpoint 保证幂等与 Exactly-Once,附完整源码与配置模板。

fengquan8866的博客 849

Apache Flink 1.19 升级指南:核心特性、配置变更与迁移要点全解析

Apache Flink 1.19 是连接 1.18 与 2.0 的关键版本,本文基于 [flink-1.19 发布说明](https://link.gitcode.com/i/f8057bdfce4bca7f73ada258efa31e80) 完整梳理从 1.18 升级到 1.19 时必须关注的配置、行为与依赖变更,涵盖 Checkpoint、运行时协调、SDK、Table SQL/API、Co

gitblog_00902的博客 192

Flink CDC OceanBase连接器:揭秘蚂蚁集团数据库实时同步的终极解决方案

Apache Flink CDC OceanBase连接器是专为蚂蚁集团分布式数据库OceanBase设计的实时数据同步工具,它通过创新的架构设计解决了金融级数据集成中的核心痛点。在当今数据驱动业务的时代,企业面临着海量数据实时同步、异构系统集成和复杂业务场景的挑战,而Flink CDC OceanBase连接器正是这些挑战的完美答案。 ## 🎯 核心价值:为什么选择Flink CDC Oce

gitblog_00425的博客 467

Apache Doris 与 Flink 集成实战:基于 flink-demo-v1.1 的 DorisSink 读写与 CDC 整库同步指南

Apache Doris 作为统一的高性能分析型数据库,常被作为实时数仓的存储与分析底座,而 Flink 则是实时计算的事实标准。本指南以当前仓库中 [flink-demo-v1.1 示例工程](https://link.gitcode.com/i/89adc96b48f9e9a3739a9c3ebf568b0f) 为线索,完整讲解如何使用 Flink 及 flink-doris-connecto

gitblog_00695的博客 14
上一篇: Flink cdc3.0同步实例(动态变更表结构、分库分表同步)
下一篇: Flink cdc debug调试动态变更表结构
yyoc97
博客等级 码龄12年 272粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值