Flink CDC 原理

简介

Flink CDC(Change Data Capture)是 Apache Flink 提供的一个变更数据捕获工具集。它可以监控数据库的变更,并将这些变更实时地以流的形式提供给下游系统,这些变更包括插入、更新和删除操作。

Flink CDC 适用于需要实时数据管道和数据流处理的场景,如实时数据分析、数据仓库更新、缓存同步、ETL 过程、微服务架构中的数据一致性等。

官网简介:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

和Flink 什么区别?

Flink 是一个更通用的流处理平台,而 Flink CDC 是构建在 Flink 之上,专注于变更数据捕获和流式数据同步的工具集。

Apache Flink 是一个开源的流处理框架,用于实时数据流的处理和分析。Flink 提供了用于构建分布式流处理应用的丰富API,包括数据流编程模型、窗口操作、状态管理、时间语义等。Flink 能够以极高的吞吐量和低延迟运行复杂的数据分析任务,并且保证数据流的一致性和准确性。Flink 也支持批处理,因此它可以作为批处理和流处理的统一引擎。

Flink CDC 是 Flink 社区提供的变更数据捕获工具集,它允许用户捕获数据库的增量变化,并将这些变化实时地以流的形式提供给下游系统。Flink CDC 工具可以监控数据库的变更,并将这些变更作为事件流输出,这些事件流可以被 Flink 流处理作业所消费。

联系

  1. Flink CDC 是基于 Flink 的生态系统构建的,它利用 Flink 的流处理能力来捕获和分发数据库的变更数据。
  2. Flink CDC 产生的变更数据流可以被 Flink 流处理作业直接消费,实现近实时的数据同步和流处理。
  3. Flink CDC 与 Flink 的集成提供了端到端的数据流解决方案,从数据源的变更捕获到数据的流式处理。

区别

  1. 功能定位:Flink 是一个通用的流处理框架,适用于各种流处理和批处理场景。Flink CDC 专注于捕获和分发数据库的变更数据。
  2. 使用场景:Flink 可以用于构建广泛的数据处理应用,而 Flink CDC 主要用于数据同步、流式ETL、实时数据仓库等需要数据库变更捕获的场景。
  3. 实现细节:Flink CDC 利用了 Flink 的内部机制,如状态后端和检查点机制,来保证变更数据的一致性和准确性。但它为数据库变更捕获提供了特定的连接器和API。

特点

  1. 实时性:
    • Flink CDC 利用数据库的日志文件(如 MySQL 的 binlog)来捕获数据变更事件,这意味着它可以几乎无延迟地获取到数据变化。
    • 通过流处理框架 Apache Flink, 变更数据可以快速被处理和传输到下游系统,适合需要低延迟反应的业务场景。
  2. 支持多种数据库:
    • 目前Flink CDC 支持广泛使用的关系型数据库如 MySQL,PostgreSQL, MongoDB,Oracle,SQL Server 等的支持。
    • 这种广泛的支持使得 Flink CDC 可以适用于多种存储系统背景下的实时数据同步和分析需求。
  3. 容错性:
    • 结合 Apache Flink 的状态管理和检查点机制(Checkpointing),Flink CDC 能够在发生故障时保证数据处理的一致性并恢复到正确状态。
    • 这是企业级应用中非常重要的特征,确保了数据处理任务在面对硬件故障或网络问题时依然能够可靠运行。
  4. 灵活性与易用性:
    • 用户可以通过简单配置就能启动一个CDC任务,无需编写复杂代码。
    • 支持自定义Deserialization schema来解析变更事件,用户可以根据自己需求进行定制化开发。
  5. 扩展性:
    • 由于基于 Apache Flink 实现,Flink CDC 自然继承了 Flink 的可伸缩架构。用户可以根据负载增加或减少任务节点。
    • 支持动态表功能(Dynamic Table),允许用户在不停止现有应用程序情况下修改表结构。
  6. 集成性:
    • 可以与Apache Kafka、Elasticsearch等其他大数据组件轻松集成,为复杂的大数据生态系统提供强大支撑。
    • 提供了连接器(Connector)接口,使得将CDC与其他外部系统连接起来变得简单快捷。
  7. 开源社区活跃
    • 作为 Apache 软件基金会项目之一,Flink 和其CDC组件拥有活跃且庞大的开发者社区。这意味着问题和bug通常能够快速被响应和解决,并且不断有新功能被添加进来。

增量快照读取

Flink CDC的增量快照读取机制是在Flink CDC 2.x版本中引入的。这一机制允许Flink CDC以更高效的方式进行数据捕获,它通过将数据表分割成多个chunk(分片),并行地对这些chunk进行快照读取,从而提高了读取速度和整体性能。

  1. 并发读取:支持多个并发读取任务,提高了数据捕获的速度。
  2. Chunk级别的checkpoint:在每个chunk读取完成后进行一次checkpoint,提高了故障恢复的准确性和效率。
  3. 全量增量无锁读取算法:不需要数据库锁权限,降低了对数据库的依赖和权限要求。

此外,Flink CDC 2.x版本还引入了Exactly-Once语义,确保数据处理结果的精确一次性,并且支持动态加表和无主键表的处理。

在Flink CDC 2.3版本中,除了对MySQL CDC的优化,还增加了对Db2、MongoDB和Oracle CDC的支持,并且这些连接器也都接入了增量快照框架,从而提供了无锁读取、并行读取和断点续传的能力。

使用示例

假设你需要从 MySQL 数据库捕获变更,并将变更数据流转发到 Kafka。以下是一个使用 Flink CDC 的简单代码示例:

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.connector.jdbc.JdbcExecutionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import com.ververica.cdc.connectors.mysql.MySqlSource;
import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema;public class FlinkCdcDemo {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();MySqlSource<String> mySqlSource = MySqlSource.<String>builder().hostname("your-db-hostname").port(3306).databaseList("your-database-name").tableList("your-database-name.your-table-name") // 可以更精确地指定表名.username("your-db-user").password("your-db-password").deserializer(new JsonDebeziumDeserializationSchema()) // 使用 JSON 格式解析数据.build();DataStream<String> stream = env.fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source");stream.addSink(new FlinkKafkaProducer<String>("your-kafka-topic",new SimpleStringSchema(),PropertiesUtil.getKafkaProperties()));env.execute("Flink CDC MySQL to Kafka");}
}

原理

Flink CDC 的原理基于变更数据捕获(Change Data Capture)技术,其核心思想是监测并捕获数据库的增量变化,如新增、修改和删除操作,然后将这些变化实时地以流的形式提供给下游系统。

工作原理可以概括为以下几个步骤:

  1. 数据捕获:CDC 引擎通过 Source Connector 从数据源中捕获变更数据。这些变更数据可以是新增、更新、删除等操作对数据的修改,通常以日志形式存在于数据源中。

  2. 数据解析:CDC 引擎对捕获的变更数据进行解析,将其转换成 Flink 的数据流格式。这包括解析变更操作的类型、影响的数据记录以及具体的变更内容等信息。

  3. 数据转换:在解析的基础上,CDC 引擎可能会对变更数据进行一些额外的转换操作,以适应目标系统或处理逻辑的要求。例如,将数据库中的行数据转换成 Flink 中的数据流格式。

  4. 数据传输:转换后的数据流被发送到 Flink 流式处理框架中进行进一步的实时处理和分析。这可以包括各种流处理操作,如数据过滤、聚合、计算等。

  5. 数据写入:处理后的数据流最终被 Sink Connector 写入到目标系统或存储介质中。这可以是将数据写入到文件系统、数据库表、消息队列等,以供后续的查询、分析或其他用途。

MySQL CDC Connector 实现原理:

1、Flink 的 MySQL CDC Connector 使用 MySQL 的二进制日志(Binlog)来捕获数据变更。Binlog 是 MySQL 中记录对数据进行更改的二进制日志文件。

2、Connector 连接到 MySQL 的 Binlog,监控其中的变更事件。通过解析 Binlog,Connector 可以了解到数据库中发生的插入、更新和删除等操作。

3、Connector 将捕获到的变更事件转换为 Flink DataStream,使其成为 Flink 流处理应用程序的输入。

PostgreSQL CDC Connector 实现原理:

1、Flink 的 PostgreSQL CDC Connector 使用 PostgreSQL 的逻辑复制机制来捕获数据变更。

2、Connector 创建一个 PostgreSQL 的逻辑复制插槽(replication slot),然后订阅这个插槽以获取数据库中的变更事件。

3、通过逻辑复制插槽,Connector 可以获取到插入、更新和删除等操作的变更事件,并将其转换为 Flink DataStream。

Debezium Connector 实现原理:

1、Debezium 是一个独立的开源 CDC 连接器,支持多种数据库。Flink 可以通过 Flink 的 Kafka Connector 与 Debezium 集成。

2、Debezium 连接到数据库的事务日志,并将变更事件发送到 Apache Kafka 中。Flink 使用 Flink 的 Kafka Connector 从 Kafka 中读取这些变更事件。

3、通过与 Debezium 集成,Flink 能够实现对多种数据库的 CDC 支持,包括 MySQL、PostgreSQL、MongoDB等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Arcgis)python geopandas库分割shp属性表特定内容,批量导出shp文件

一、两个文件。实现目标&#xff1a;从1个shp文件&#xff0c;根据属性表内容提取成200个shp文件&#xff0c;文件名取自txt文本内容 shp文件&#xff08;要素1-200.shp&#xff09;&#xff1a;打开属性表前14项相同&#xff0c;后200项不相同。 ————任务目标&#xff1a…

【yolov8分类任务-全流程】【公开数据白内障-101:101例白内障手术的视频数据集】

文章目录 1.公开数据集1.1.白内障-101&#xff1a;数据集文件结构1.1.1.视频文件1.1.2.注释文件(1)videos.csv(2) phases.csv(3)annotations.csv 1.2. 数据处理1.2.1.抽帧脚本全部代码&#xff08;每行都有注释&#xff09;1.2.2.分类任务划分数据集脚本 2.yolov8分类任务训练2…

代码技巧: 类中同一个函数可以同时存在常函数版本和普通函数版本(c++)

在类中如果我们希望在常函数中修改某属性的值可以使用mutable来实现。 如果有下面的场景&#xff0c;假设我们有一个函数hobby()需要在非const的对象调用的时候&#xff0c;应该去修改内部的属性&#xff0c;在const修饰的对象调用的时候可以满足不修改内部的属性。 鉴于上面的…

effective python学习笔记_列表与字典

学习对序列做切片 实现了__getitem__类即可支持切片&#xff0c;实现了__setitem__类可支持切片赋值 切片时下标索引可以越界&#xff0c;但按下标访问元素不可以越界&#xff0c;会IndexError 可以通过切片赋值不相等数量元素实现元素添加或赋值 切片不建议同时提供起始下…

【Shell】Shell编程之函数

目录 1.Shell函数定义 2.Shell函数的作用 3.函数返回值 4.函数传参 5.函数变量的作用范围 案例 1.Shell函数定义 格式1 function 函数名 { 命令序列 } 格式2 函数名() { 命令序列 } 2.Shell函数的作用 使用函数可以避免代码重复 使用函数可以将大的工程分割为若…

2024OD机试卷-素数之积 (java\python\c++)

题目:素数之积 题目描述 RSA加密算法 在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。 输入描述 一个正整数 num 0 < num < 2147483647 输出描述 如果…

供水设备数据采集

随着城市化进程的加快&#xff0c;供水系统作为城市基础设施的重要组成部分&#xff0c;其运行效率和稳定性直接关系到市民的日常生活。在这个信息化、智能化的时代&#xff0c;如何利用先进技术提升供水系统的管理水平&#xff0c;成为了摆在我们面前的重要课题。HiWoo Cloud平…

java+jsp+sql server 医院住院管理系统论文(二)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…

vue+cesium项目demo

使用turf时在index.html中引用 <!-- 使用unpkg --> <script src"https://unpkg.com/turf/turf/turf.min.js"></script> <template><div class"cesium_box" id"cesiumContatiner"></div><button class&q…

【保姆级教程】VMware Workstation Pro的虚拟机导入vritualbox详细教程

解决方案 1、OVF格式2、VMX格式 1、OVF格式 选定需要导出的虚拟机&#xff08;关闭或者挂起状态下&#xff09;依次选择文件-导出为ovf 在Vritualbox导入刚刚导出的.ovf文件 更改路径&#xff0c;按实际需要修改 成功导入 2、VMX格式 如果在VMware Workstation Pro导出的…

Vue实战技巧 —— 企业开发实战中的常见疑难问题

Vue企业开发实战中的常见疑难问题 1. 解决Vue动态路由参数变化&#xff0c;页面数据不更新2. vue组件里定时器销毁问题3. vue实现按需加载组件的两种方式4. 组件之间&#xff0c;父子组件之间的通信方案5. Vue中获取当前父元素&#xff0c;子元素&#xff0c;兄弟元素6. 开发环…

安卓手机APP开发__支持不同的语言和文化

安卓手机APP开发__支持不同的语言和文化 目录 概述 创建本地的目录和资源文件 在你的app中使用资源 结构化消息中的文本 概述 APP包括了能被指定为一种特定的文件的资源。例如&#xff0c;一个APP能够包括 特定的文件的字符串&#xff0c;这个字符串能被翻译为本地的语言…

pg数据库的热备

Pg数据库主从复制 ​ 前言&#xff1a;公司的一台服务器因为断电导致系统损坏&#xff0c;经过3天的抢修&#xff0c;将服务器和数据恢复。为了避免数据的丢失&#xff0c;先将数据备份&#xff0c;并进行高可用。 ​ 采用技术&#xff1a;keepalivedpg ​ 后期并实现zabbix…

传说中的运维门户设计

在IT服务管理这片广阔天地中&#xff0c;运维门户如同一位技艺高超的魔术师&#xff0c;轻轻一挥手&#xff0c;便将纷繁复杂的运维世界化繁为简&#xff0c;编织成一张便捷高效、触手可及的网络。它不仅是ITSM系统中不可或缺的一环&#xff0c;更是连接用户与技术世界的桥梁&a…

Spring WebFlux:响应式编程

在软件开发领域&#xff0c;随着互联网应用的规模和复杂性不断增加&#xff0c;传统的编程模型逐渐暴露出一些局限性&#xff0c;尤其是在面对高并发、大规模数据流处理等场景时。为了应对这些挑战&#xff0c;响应式编程&#xff08;Reactive Programming&#xff09;应运而生…

Java字符串去除空格的方法

前言 在Java编程实践中&#xff0c;处理字符串中的空格是一项基本且频繁的操作。本文将深入探讨如何使用Java原生方法以及Apache Commons Lang库中的StringUtils类&#xff0c;全方位解决字符串去空格的需求&#xff0c;让你的代码更加健壮和高效。 1. Java原生方法 a. trim…

电商核心技术揭秘56:客户关系管理与忠诚度提升

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言客户关系管理&#xff08;CRM&#xff09;的重要性提升顾客体验数据驱…

AWS之云种类与云服务模式

云种类分为3种&#xff1a; 公有云&#xff1a;任何个人或者企业都可以通过注册的方式直接使用的云。&#xff08;特点&#xff1a;使用简单&#xff1b;通过web界面快速购买。缺点&#xff1a;安全性低&#xff1b;使用资源是与其他用户共享。&#xff09; 私有云&#xff1…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天&#xff0c;随着上云业务的用户数量越来越多、数据中心的规模…

umi项目配置之项目构建时配置umirc.ts

对于 umi 中能使用的自定义配置&#xff0c;你可以使用项目根目录的 .umirc.ts 文件或者 config/config.ts&#xff0c;值得注意的是这两个文件功能一致&#xff0c;仅仅是存在目录不同&#xff0c;2 选 1 &#xff0c;.umirc.ts 文件优先级较高 umi 的配置文件是一个正常的 n…