flink cdc原理与使用

flink cdc笔记(一):flink cdc简介 flink cdc 阅读详情

1 cdc 介绍

1.1 cdc简介与对比

CDC 是(Change Data Capture 变更数据获取)的简称。

核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入 INSERT、更新 UPDATE、删除 DELETE 等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅 及消费。

像是常用来同步mysql binlog的canal 就是一个cdc工具。

CDC 全称是 Change Data Capture ,它是一个比较广义的概念,只要能捕获变更的数据,我们都可以 称为 CDC 。业界主要有基于查询的 CDC 和基于日志的 CDC ,可以从下面表格对比他们功能和差 异点。

在这里插入图片描述
经过以上对比,我们可以发现基于日志 CDC 有以下这几种优势:

  • · 能够捕获所有数据的变化,捕获完整的变更记录。在异地容灾,数据备份等场景中得到广泛应用, 如果是基于查询的 CDC 有可能导致两次查询的中间一部分数据丢失
  • · 每次 DML 操作均有记录无需像查询 CDC 这样发起全表扫描进行过滤,拥有更高的效率和性能, 具有低延迟,不增加数据库负载的优势
  • · 无需入侵业务,业务解耦,无需更改业务模型
  • · 捕获删除事件和捕获旧记录的状态,在查询 CDC 中,周期的查询无法感知中间数据是否删除
    在这里插入图片描述
    在实时性、吞吐量方面占优,如果数据源是 MySQL、PostgreSQL、MongoDB 等常见的数据库实现,
    建议使用 Debezium 来实现变更数据的捕获(下图来自 Debezium 官方文档)。如果使用的只有 MySQL,则可以用 Canal。
    在这里插入图片描述

1.2 基于日志的 CDC 方案介绍

从 ETL 的角度进行分析,一般采集的都是业务库数据,这里使用 MySQL 作为需要采集的数据库, 通过 Debezium 把 MySQL Binlog 进行采集后发送至 Kafka 消息队列,然后对接一些实时计算引擎 或者 APP 进行消费后把数据传输入 OLAP 系统或者其他存储介质。
Flink 希望打通更多数据源,发挥完整的计算能力。我们生产中主要来源于业务日志和数据库日志, Flink 在业务日志的支持上已经非常完善,但是在数据库日志支持方面在 Flink 1.11 前还属于一片空 白,这就是为什么要集成 CDC 的原因之一。
Flink SQL 内部支持了完整的 changelog 机制,所以 Flink 对接 CDC 数据只需要把 CDC 数据转换 成 Flink 认识的数据,所以在 Flink 1.11 里面重构了 TableSource 接口,以便更好支持和集成 CDC。
在这里插入图片描述

重构后的 TableSource 输出的都是 RowData 数据结构,代表了一行的数据。在 RowData 上面会有 一个元数据的信息,我们称为 RowKind 。RowKind 里面包括了插入、更新前、更新后、删除,这 样和数据库里面的 binlog 概念十分类似。通过 Debezium 采集的 JSON 格式,包含了旧数据和新数 据行以及原数据信息,op 的 u 表示是 update 更新操作标识符,ts_ms 表示同步的时间戳。因此, 对接 Debezium JSON 的数据,其实就是将这种原始的 JSON 数据转换成 Flink 认识的 RowData。 选择 Flink 作为 ETL 工具。
当选择 Flink 作为 ETL 工具时,在数据同步场景,如下图同步结构:
在这里插入图片描述
通过 Debezium 订阅业务库 MySQL 的 Binlog 传输至 Kafka ,Flink 通过创建 Kafka 表指定 format 格式为 debezium-json ,然后通过 Flink 进行计算后或者直接插入到其他外部数据存储系统, 例如图中的 Elasticsearch 和 PostgreSQL。
在这里插入图片描述
但是这个架构有个缺点,我们可以看到采集端组件过多导致维护繁杂,这时候就会想是否可以用 Flink SQL 直接对接 MySQL 的 binlog 数据呢,有没可以替代的方案呢? 答案是有的!经过改进后结构如下图:
在这里插入图片描述
社区开发了 flink-cdc-connectors 组件,这是一个可以直接从 MySQL、PostgreSQL 等数据库直接读
取全量数据和增量变更数据的 source 组件。目前也已开源,开源地址: https://github.com/ververica/flink-cdc-connectors
flink-cdc-connectors 可以用来替换 Debezium+Kafka 的数据采集模块,从而实现 Flink SQL 采集+计 算+传输(ETL)一体化,这样做的优点有以下:

  •  开箱即用,简单易上手
  •  减少维护的组件,简化实时链路,减轻部署成本
  •  减小端到端延迟
  •  Flink 自身支持 Exactly Once 的读取和计算
  •  数据不落地,减少存储成本
  •  支持全量和增量流式读取
  •  binlog 采集位点可回溯

2 基于 Flink SQL CDC 的数据同步方案实践

2.1 案例 1 : Flink SQL CDC + JDBC Connector

这个案例通过订阅我们订单表(事实表)数据,通过 Debezium 将 MySQL Binlog 发送至 Kafka, 通过维表 Join 和 ETL 操作把结果输出至下游的 PG 数据库。
在这里插入图片描述

2.2 案例 2 : CDC Streaming ETL

模拟电商公司的订单表和物流表,需要对订单数据进行统计分析,对于不同的信息需要进行关联后续 形成订单的大宽表后,交给下游的业务方使用 ES 做数据分析,这个案例演示了如何只依赖 Flink 不 依赖其他组件,借助 Flink 强大的计算能力实时把 Binlog 的数据流关联一次并同步至 ES 。
在这里插入图片描述
例如如下的这段 Flink SQL 代码就能完成实时同步 MySQL 中 orders 表的全量+增量数据的目的。

CREATE TABLE orders ( order_id INT, order_date TIMESTAMP(0), customer_name STRING, price DECIMAL(10, 5), product_id INT, order_status BOOLEAN ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = 'localhost', 'port' = '3306', 'username' = 'root', 'p@assw@ord' = '1@23456', 'database-name' = 'mydb', 'table-name' = 'orders' );SELECT * FROM orders

2.3 案例 3 : Streaming Changes to Kafka

下面案例就是对 GMV 进行天级别的全站统计。包含插入/更新/删除,只有付款的订单才能计算进入 GMV ,观察 GMV 值的变化。
在这里插入图片描述

3 Flink SQL CDC 的更多应用场景

Flink SQL CDC 不仅可以灵活地应用于实时数据同步场景中,还可以打通更多场景提供给用户选择。 Flink 在数据同步场景中的灵活定位

  •  如果已有 Debezium/Canal + Kafka 的采集层 (E),可以使用 Flink 作为计算层 (T) 和传输层 (L)
  •  也可用 Flink 替代 Debezium/Canal ,由 Flink 直接同步变更数据到 Kafka,Flink 统一 ETL 流程
  •  如果不需要 Kafka 数据缓存,可以由 Flink 直接同步变更数据到目的地,Flink 统一 ETL 流程

4 Flink SQL CDC : 打通更多场景

  •  实时数据同步,数据备份,数据迁移,数仓构建 优势:丰富的上下游(E & L),强大的计算(T),易用的 API(SQL),流式计算低延迟
  •  数据库之上的实时物化视图、流式数据分析
  •  索引构建和实时维护
  •  业务 cache 刷新
  •  审计跟踪
  •  微服务的解耦,读写分离
  •  基于 CDC 的维表关联

下面介绍一下为何用 CDC 的维表关联会比基于查询的维表查询快。

  • 基于查询的维表关联
    在这里插入图片描述
    目前维表查询的方式主要是通过 Join 的方式,数据从消息队列进来后通过向数据库发起 IO 的请 求,由数据库把结果返回后合并再输出到下游,但是这个过程无可避免的产生了 IO 和网络通信的消 耗,导致吞吐量无法进一步提升,就算使用一些缓存机制,但是因为缓存更新不及时可能会导致精确 性也没那么高。

  • ■ 基于 CDC 的维表关联
    在这里插入图片描述
    我们可以通过 CDC 把维表的数据导入到维表 Join 的状态里面,在这个 State 里面因为它是一个分 布式的 State ,里面保存了 Database 里面实时的数据库维表镜像,当消息队列数据过来时候无需再 次查询远程的数据库了,直接查询本地磁盘的 State ,避免了 IO 操作,实现了低延迟、高吞吐,更 精准。

FlinkCDC详解 flink的cdc详解 阅读详情

相关推荐

Flink CDC 详解

Flink CDC介绍

在森林里麋了鹿 1万+

Flink CDC详解

CDC 的全称是 Change Data Capture ,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。Flink CDC本质是一组数据源连接器,使用更改数据捕获(CDC)从不同的数据库中摄取更改。Apache Flink®的CDC连接器集成了Debezium作为捕获数据更改的引擎,所以它可以充分利用Debezium的能力。

Aidon博客 1万+

Flink_CDC搭建及简单使用

CDC(ChangeDataCapture),在广义的概念上,只要能捕获数据变更的技术,都可以称为CDC。但通常我们说的CDC技术主要面向数据库(包括常见的mysql,Oracle,MongoDB等)的变更,是一种用于捕获数据库中数据变更的技术。目前市面上的CDC技术非常多,常见的主要包括FlinkCDC,DataX,Canal,Sqoop,Kettle,OracleGoldengate,Debezium等。...

m0_67392811的博客 1131

Flink CDC详细教程(介绍、原理、代码样例)

CDC 是变更数据捕获(Change Data Capture)技术的缩写,它可以将源数据库(Source)的增量变动记录,同步到一个或多个数据目的(Sink)。在同步过程中,还可以对数据进行一定的处理,例如分组(GROUP BY)、多表的关联(JOIN)等。例如对于电商平台,用户的订单会实时写入到某个源数据库;A 部门需要将每分钟的实时数据简单聚合处理后保存到 Redis 中以供查询,B 部门需要将当天的数据暂存到 Elasticsearch 一份来做报表展示,C 部门也需要一份数据到 ClickHous

少说,多做 2万+

Flink CDC 与 SeaTunnel CDC 简单对比

Flink CDC 与 SeaTunnel CDC 简单对比

蜗牛的专栏 2135

Flink CDC MongoDB Connector的实现原理和使用实践

本文将详细介绍Flink CDC MongoDB Connector的实现原理和使用实践,并提供相应的源代码示例。通过连接MongoDB数据库和配置Flink CDC连接器,我们可以捕获MongoDB中的变更数据,并使用Flink进行实时处理和分析。在上述示例中,我们首先创建了一个MongoDB连接,并指定了要连接的数据库和集合。然后,我们创建了一个Flink执行环境,并配置了Flink CDC SourceFunction,指定了MongoDB的连接信息和要捕获的数据库和集合。来执行Flink任务。

VqhhMobile的博客 1075

Flink CDC 原理与使用指南

Flink CDC 的核心原理1. CDC 技术基础CDC(Change Data Capture)是一种通过捕获数据库的增量变更(如 INSERT、UPDATE、DELETE 操作)实现数据实时同步的技术。其实现模式主要分为两类: 基于查询的 CDC:通过轮询数据库字段(如时间戳)判断变更,实时性差且对数据库压力大。 基于日志的 CDC:通过解析数据库的事务日志(如 MySQL 的 binl...

Focus on Lakehouse 965

Flink CDC MongoDB Connector 的实现原理和使用实践

对于分片集合,可以直接在 chunks 中读取它的边界信息,无须重复计算这些分裂点,也可以保证每一个 chunk 的读取在单台机器上就能完成,速度极快,在大规模的分片集合场景下有着很好的表现。:水平扩展的部署模式,将数据均匀分散在不同 Shard 上,每个 Shard 可以部署为一个副本集,Shard 中主要节点承载读写请求,次要节点会复制主要节点的操作日志,能够根据指定的分片索引和分片策略将数据切分成多个 16MB 的数据块,并将这些数据块交给不同 Shard 进行存储。...

qq_61890005的博客 315

使用 Flink CDC 实现 MySQL 数据实时入 Apache Doris

Apache Doris 代码仓库地址:apache/incubator-doris 欢迎大家关注加星 本文通过实例来演示怎么通过Flink CDC 结合Doris的Flink Connector实现从Mysql数据库中监听数据并实时入库到Doris数仓对应的表中。 1.什么是CDC CDC 是变更数据捕获(Change Data Capture)技术的缩写,它可以将源数据库(Source)的增量变动记录,同步到一个或多个数据目的(Sink)。在同步过程中,还可以对数据进行一定的处理,例如分组(GRO

3143

Flink CDC 原理、实践和优化

我们知道,Flink 是通过 Java 的 SPI(Service Provider Interface)机制动态加载 Connector 的,因此我们首先看这个模块的 src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory 文件,里面内容指向 com.alibaba.ververica.cdc.connectors.mysql.table.MySQLTableSourceFactory。...

SmartSi 1800

【大数据】Flink CDC 实时同步mysql数据

Flink CDC 实时同步mysql数据

congge 1万+

大数据技术之 Flink-CDC

大数据技术之 Flink-CDC

痞子磊的博客 2706

Flink系列之:深入了解Flink CDC连接器与MySQL CDC

本文介绍了Flink CDC连接器与MySQL CDC的工作原理,并提供了一个使用Flink CDC连接器捕获MySQL CDC数据的示例代码。通过使用Flink CDC连接器,我们可以轻松地将实时变更数据从MySQL等关系型数据库中捕获,并与Flink的流处理能力相结合,实现强大的实时数据处理和分析。它基于数据库的日志(如MySQL二进制日志)来捕获数据库的变更事件,并将这些事件作为流式数据输入到Flink的数据流中进行处理和分析。Flink系列之:深入了解Flink CDC连接器与MySQL CDC。

qq_39605374的博客 770

Flink CDC介绍和简单实用

CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。...............

MyNameIsWangYi的博客 4213

一文读懂GPU通信互联技术:GPUDirect、NVLink与RDMA

GPUDirect是NVIDIA开发的一项技术,旨在实现GPU与其他设备(如网络接口卡NIC和存储设备)之间的直接通信和数据传输,而无需CPU的参与。传统上,数据在GPU和另一个设备之间传输时,必须通过CPU,这导致潜在的性能瓶颈和延迟增加。GPUDirect技术则通过绕过CPU,直接访问和传输数据,显著提高系统性能。NVLink是NVIDIA开发的一种高速、高带宽的互连技术,用于连接多个GPU之间或GPU与其他设备(如CPU、内存等)之间的通信。

异构算力老群群(在读985计算机博士生)的技术博客 7777

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3129

一文进入Flink CDC 的世界

CDC有两种方式,一种是离线的,一种是实时的,也就是一种是基于查询的,一种是Binlog的这种方式。CDC 是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。

weixin_45417821的博客 1347

Python入门基础教程(非常详细)

Python是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,坚持「极简主义」。Python类库(模块)极其丰富,这使得Python几乎无所不能,不管是传统的Web开发、PC软件开发、Linux运维,还是当下火热的机器学习、大数据分析、网络爬虫,Python都能胜任。这套Python基础教程不是教科书,不会玩弄概念,而是力求口语化和通俗化,让读者尽快入门。如果有小朋友出于兴趣学习Python,请引导他阅读本教程的前半部分,这是基础,可以降低学习成本;...

Yuki1127918的博客 34万+

flink集成tidb cdc

Flink CDC 是一个基于 Flink 的变更数据捕获框架,支持从多种数据库(如 MySQL、PostgreSQL、TiDB)中捕获变更数据。Flink CDC 提供了开箱即用的连接器,能够简化与 TiDB CDC 的集成。Flink 与 TiDB CDC 的集成为实时数据同步和流式数据处理提供了强大的能力。通过 TiCDC 捕获 TiDB 的变更数据,并结合 Flink 的流处理能力,可以实现高效、灵活的实时数据管道。

qq_41067796的博客 1485

告别外置天线!手把手教你用HFSS仿真设计一个20x40mm的433MHz PCB蛇形天线

本文详细介绍了如何使用HFSS仿真工具设计一个20x40mm的433MHz PCB蛇形天线,解决物联网设备小型化中的天线集成难题。通过对比外置天线与PCB天线的性能差异,深入解析蛇形天线的电磁学原理,并提供从建模到优化的全流程实战指南,帮助工程师实现高效、低成本的微型化天线设计。

weixin_30606461的博客 433

【Dify系列教程重置精品版】第二章:在Windows上部署Dify

让我们的电脑允许使用Linux系统。有点兴奋是怎么回事?简单来说就是让你的电脑拥有另一个叫做Linux的系统。3.选择“适用于Linux的Windows子系统”与 “虚拟机平台”与“Hyper-V"第1章:安装 wsl (Windows Subsystem for Linux)上一章我们聊了什么是Dify,这一章我们讲一下怎么才能用Dify。好了,我们的环境部署好了,下一章我们正式进入Dify。下载完成后,我们直接一直无脑下一步,安装即可。完成上述步骤,我们就可以开始安装wsl了。我们的虚拟化也是开启的。

xiezhipu的博客 867

博文推荐|Flink CDC 结合 Doris Flink Connector 实现MySQL数据实时入Apache Doris

本文通过实例...

ucanuup_的博客 2576

arcgis计算栅格平均值

打开FC栅格数据和非水体矢量数据 利用矢量数据提取对应栅格的非水体部分 2.1打开空间分析工具à提取分析à按掩膜提取 输入对应栅格数据和矢量数据 2.2提取结果如下 进行计算FC平均值 3.1打开空间分析工具à多元分析à波段集统计 输入对应栅格和输出路径 3.2统计结果如下 ...

Z_W_H_的博客 5371
上一篇: Flink 2.0 状态管理存算分离架构演进与分离改造实践,新特性,与1.0+不兼容部分介绍
下一篇: 一种基于动态水位值的Flink调度优化算法(flink1.5以前),等同于实现flink的Credit-based反压原理
Direction_Wind
博客等级 码龄8年 6438粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Direction_Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值