实时捕获数据库变更

1.CDC概述

CDC 的全称是 Change Data Capture ,在广义的概念上,只要能捕获数据变更的技术,我们都可以称为 CDC 。我们目前通常描述的CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术,CDC 技术应用场景非常广泛:

  1. 数据同步,用于备份,容灾
  2. 数据分发,一个数据源分发给多个下游系统
  3. 数据采集,面向数据仓库/数据湖的 ETL 数据集成,是非常重要的数据源

2.常用的CDC工具对比

3.CDC实现方案Kafka Connect + Flink

3.1系统架构

在该场景下,由于 CDC 变更记录会暂存到 Kafka 一段时间,因此可以在这期间任意启动/重启 Flink 作业进行消费;也可以部署多个 Flink 作业对这些数据同时处理并写到不同的数据目的(Sink)库表中,实现了 Source 变动与 Sink 的解耦。

3.2优缺点分析

优点:

  1. 数据采集和数据消费通过kafka解耦

缺点:

  1. 不支持表结构变更同步
  2. 需额外部署kafka connect工具,采集源端变更数据
  3. 数据链路太长,变更的数据到下游有一定的延迟

3.3Debezium版本选择

Debezium 1.5.3.Final支持的数据库有:MySQL、MongoDB、PostgreSQL、Oracle、SQL Server、Db2。 PS:高版本的debezium使用的是openjdk11。

3.4Flink版本选择

Flink版本与cdc相关的特性列表:

Flink版本

CDC特性

Flink1.10

不支持

Flink1.11

支持debezium-json和canal-json(mysql)

Flink1.12

支持maxwell-json(mysql)

支持debezium-avro-confluent

Flink1.13+

未变化

PS: debezium-avro-confluent格式依赖的jar是flink-avro-confluent-registry

其他格式依赖的jar是flink-json (Flink 内置)

4.CDC实现方案​​​​​​​Flink CDC Connectors

Flink CDC Connectors 是一组用于 Apache Flink 的源连接器,使用变更数据捕获 (CDC) 从不同的数据库中获取变更。 Flink CDC 连接器集成了 Debezium 作为引擎来捕获数据变化。所以它可以充分发挥 Debezium 的能力。

4.1系统架构​​​​​​​

----Table/SQL API 示例----

----DataStream API 示例----

​​​​​​​4.2优缺点分析

Table/SQL API的方式

优点:

  1. 使用SQL方式,易于使用,且支持多表联合进行数据处理

缺点:

  1. 不支持表结构变更同步
  2. 每张CDC表都内嵌了debezium采集器,对源业务系统影响较大

DataStream API的方式

优点:

  1. 一个source可以同步多表数据

缺点:

  1. 不支持表结构变更同步
  2. 需开发数据落地算子,将devezium-json格式的数据解析后,分别写入目标表中

​​​​​​​​​​​​​​4.3支持的数据源

4.4支持的Flink版本

5.CDC实现方案—OceanMind

基于以上方案的优缺点分析,OceanMind在Flink CDC路线基础上进行了技术创新,通过新建实时任务,进行可视化的算子拖拽配置,即可生成定制的flink cdc流程。此方式降低了使用门槛,可快速满足业务部门的实时数据捕获使用需求,提升工作效率。

5.1系统架构
​​​​​​​

5.2使用示例

5.3方案对比分析

OceanMind集成Flink CDC

Flink CDC Table/SQL

Flink CDC DataStream

Kafka Connect + Flink

全量+增量

资源消耗

★★★

★★

★★★★

对源端系统影响

★★★

处理效率

★★★★

★★★★

★★★

★★★

支持SQL处理

X

X

变更数据延迟

★★★

易用性

★★★★★

★★★★

★★

★★

5.4方案创新点

  1. 新增元数据op_type字段,记录操作标识
  2. 落地算子新增Append模式,将历史变更数据全部记录下来,用于历史溯源
  3. 解决Oracle 全量同步阶段切片不均匀问题
  4. 解决PostgreSQL CDC不支持中文库表名

5.5支持的数据源

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Plotly-驯化】一文教你学会画最美动态可视化的热力图:heatmap技巧

【Plotly-驯化】一文教你学会画最美动态可视化的热力图:heatmap技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取…

JS:JavaScript 简介

前言 在当今数字时代,JavaScript已然成为了现代Web开发的基石。从最初作为浏览器中的一个小型脚本语言,到如今成为驱动全球互联网的强大引擎,JavaScript的发展历程本身就是一个令人着迷的故事。 好了开始学习JS吧 1. 如果刚开始了解js&#…

智慧城管解决方案

1. 项目整体概述 智慧城管项目面临历史发展机遇,十九大提出以人为核心保障民生,推进新型城镇化。市民对政府服务有新诉求,同时云计算、物联网、移动互联网等技术迅速发展。 2. 传统城管业务模式问题 传统城管业务模式存在问题,…

leetcode106. 从中序与后序遍历序列构造二叉树,力扣105姊妹题

leetcode106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…

【每日刷题】Day86

【每日刷题】Day86 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 118. 杨辉三角 - 力扣(LeetCode) 2. 数组中出现次数超过一半的数字_牛客题霸…

详解Mysql InnoDB引擎 04

文章目录 1. InnoDB 简介2. 逻辑存储结构2.1 表空间 idb文件2.2 段2.3 区 1M2.4 页 16KB2.5 行 3. 架构3.1 内存结构3.1.1 Buffer Pool 缓冲池3.1.2 Change Buffer 更改缓冲区3.1.3 Adaptive Hash Index3.1.4 Log Buffer 3.2 磁盘结构 4. 后台线程5. 事务原理5.1 redo log 重做…

C++的STL简介(一)

目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.string类 4.1为什么学习string类? 4.2string常见接口 4.2.1默认构造 ​编辑 4.2.2析构函数 Element access: 4.2.3 [] 4.2.4迭代器 ​编辑 auto 4.2.4.1 begin和end 4.2.4.2.regin和rend Capacity: 4.2.5…

LangChain曝关键漏洞,数百万AI应用面临攻击风险

LangChain是一个流行的开源生成式人工智能框架,其官网介绍,有超过一百万名开发者使用LangChain框架来开发大型语言模型(LLM)应用程序。LangChain的合作伙伴包括云计算、人工智能、数据库和其他技术开发领域的许多知名企业。 近日&…

前端模块化CommonJS、AMD、CMD、ES6

在前端开发中,模块化是一种重要的代码组织方式,它有助于将复杂的代码拆分成可管理的小块,提高代码的可维护性和可重用性。CommonJS、AMD(异步模块定义)和CMD(通用模块定义)是三种不同的模块规范…

数据库设计过程概述

1.首先进行需求分析,通过数据流图,数据字典,需求说明书等确定数据处理要求 2.概要结构设计 3.逻辑结构设计 4.物理设计

计算机二级题--结构体及链表 章节

之前写的有结构体全部的知识点,这一篇主要针对计算机二级真题的整理。 需要备考计算机二级的小伙伴们先收藏起来吧。整理不易,不过有帮助记得点赞哦 高频考点(容易出错,附有例题) 1.结构体传参,传值的区…

数字图像处理中的常用特殊矩阵及MATLAB实现详解

一、前言 Matlab的名称来源于“矩阵实验室(Matrix Laboratory)”,其对矩阵的操作具有先天性的优势(特别是相对于C语言的数组来说)。在数字图像处理中,为了提高编程效率,我们可以使用多种方式来创…

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如,我们输入lookfor inpu…

JDK的配置

安装好JDK后,配置三个环境变量 第一步,配置JAVA_HOME. 先找到JDK的安装目录,然后复制路径,在电脑的环境变量里增添变量名为JAVA_HOME,变量值为 C:\Program Files\Java\jdk1.8.0_192。(具体根据你的JDK安装路径&…

使用flutter做圆形进度条 (桌面端)

前言 最近收到一个需求,需要使用flutter 来做一个圆形进度条,这可难倒我了,毕竟我是做前端的,flutter 之前接触的也少,但没办法,既然需求有了,也得硬着头皮上了,先来看看做的效果。…

一些电脑的操作技巧,你知道吗?

我整理了几个电脑使用的实用技巧,能够帮你提升办公效率,一起来看看吧! 技巧一:反方向移动单元格 一般来讲,我们按下【Tab】键、【Enter】键的时候,会切换到右边或者下边的单元格,想要反向移动…

c-periphery RS485串口库文档serial.md(serial.h)(非阻塞读)(VMIN、VTIME)

c-peripheryhttps://github.com/vsergeev/c-periphery 文章目录 NAMESYNOPSISENUMERATIONS关于奇偶校验枚举类型 DESCRIPTIONserial_new()serial_open()关于流控制软件流控制(XON/XOFF)硬件流控制(RTS/CTS)选择流控制方法 serial_…

基于Java+SpringMvc+Vue技术的慈善捐赠平台设计与实现(源码+LW+部署讲解)

项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Windows 8 开发语言:java 前端技术:JavaScript、VUE.j…

水源地(水库)水质、水位、流量监测系统

随着全球气候变化和工业化进程的加速,水库作为重要的水资源储备和调节设施,其水质、水位和流量的监测与管理显得尤为重要。水库水质、水位、流量综合监测系统正是在这样的背景下应运而生,旨在实现对水库水资源的全面、实时、准确的监测与管理…

【吊打面试官系列-Dubbo面试题】Dubbo 服务降级,失败重试怎么做?

大家好,我是锋哥。今天分享关于 【Dubbo 服务降级,失败重试怎么做?】面试题,希望对大家有帮助; Dubbo 服务降级,失败重试怎么做? 可以通过 dubbo:reference 中设置 mock"return null"…