【大数据精讲】全量同步与CDC增量同步方案对比

目录

背景

名词解释

问题与挑战

FlinkCDC

DataX

工作原理

调度流程

五、DataX 3.0六大核心优势

性能优化


背景

名词解释

CDC

       CDC又称变更数据捕获(Change Data Capture),开启cdc的源表在插入INSERT、更新UPDATE和删除DELETE活动时会插入数据到日志表中。CDC通过捕获进程将变更数据捕获到变更表中,通过cdc提供的查询函数,我们可以捕获这部分数据。

ETL

       ETL数据仓库技术(Extract-Transform-Load),它是将数据从源系统加载到数据仓库的过程。用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。使用到的工具包含(kettle、flume、sqoop)。

问题与挑战

CDC乃至数据集成领域面临的技术挑战:

  • 历史数据规模大:数据库的历史数据规模大,100T+ 规模很常见

  • 增量数据实时性要求高:数据库的增量数据业务价值高,且价值随时间递减,需要实时处理

  • 数据的保序性:CDC 数据的加工结果通常需要强一致性语义,需要处理工具支持全局保序

  • 表结构动态变化:增量数据随时间增长,数据对应的表结构会不断演进

FlinkCDC

        Flink CDC 是以 Debezium 作为底层采集工具。Debezium 支持全量同步,也支持增量同步,也支持全量 + 增量的同步,非常灵活,同时基于日志的 CDC 技术使得提供 Exactly-Once 成为可能。

架构设计

        传统的CDC ETL链路中,采集到的数据一般输出到消息中间件如 Kafka,然后 Flink 计算引擎再去消费这一部分数据写入到目的端,目的端可以是各种 DB,数据湖,实时数仓和离线数仓等:

图片

Flink CDC

参考:Flink CDC 1.0至3.0回忆录

DataX

工作原理

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

在讲解datax原理之前,需要明确一些概念:

  • Job: Job是DataX用以描述从一个源头到一个目的端的同步作业,是DataX数据同步的最小业务单元。比如:从一张mysql的表同步到hive的一个表的特定分区。
  • Task: Task是为最大化而把Job拆分得到的最小执行单元。比如:读一张有1024个分表的mysql分库分表的Job,拆分成1024个读Task,若干个任务并发执行。或者将一个大表按照id拆分成1024个分片,若干个分片任务并发执行。
  • TaskGroup: 描述的是一组Task集合。在同一个TaskGroupContainer执行下的Task集合称之为TaskGroup。
  • JobContainer: Job执行器,负责Job全局拆分、调度、前置语句和后置语句等工作的工作单元。
  • TaskGroupContainer: TaskGroup执行器,负责执行一组Task的工作单元。
  • job和task是datax两种维度的抽象,后面源码分析中还会涉及到。

datax的处理过程可描述为:

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0。

调度流程

举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

  1. DataXJob根据分库分表切分成了100个Task。
  2. 根据20个并发,DataX计算共需要分配4个TaskGroup(默认单个任务组的并发数量为5)。
  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

性能优化

最直接的方式就是提高mysql和hdfs的硬件性能如cpu、内存、IOPS、网络带宽等。当硬件资源受限的情况下,可以有如下几种办法:

将不同的集群划分到同一个网络或者区域内,减少跨网络的不稳定性,如将阿里云集群迁移到amazon集群,或者同一个amazon集群中不同区域划分到同一个子网络内。

对数据库按照主键划分。datax对单个表默认一个通道,如果指定拆分主键,将会大大提升同步并发数和吞吐量。

在cpu、内存以及mysql负载满足的情况下,提升通道并发数。通道并发数意味着更多的内存开销,jvm调优是重中之重。

当无法提升通道数量时,而且每个拆分依然很大的时候,可以考虑对每个拆分再次拆分。

设定合适的参数,如mysql超时等。

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

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

相关文章

08-微服务Seata分布式事务使用

一、分布式事务简介 1.1 概念 事务ACID: A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。 C(Consistency&…

代码随想录算法训练营day14|二叉树的遍历

理论基础 递归遍历 迭代遍历 统一迭代 理论基础 需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义 文章讲解:代码随想录 递归遍历 (必须掌握) 二叉树的三种递归遍历掌握其规律后,其实很简单 …

ubuntu附加驱动 全部灰色,无法点击

使用命令下载:参考:解决nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.-CSDN博客

npm install运行报错npm ERR! gyp ERR! not ok问题解决

执行npm install的时候报错: npm ERR! path D:..\node_modules\\**node-sass** npm ERR! command failed ...npm ERR! gyp ERR! node -v v20.11.0 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok根据报错信息,看出时node-sass运行出现…

写点东西《检查和更新NPM包》

写点东西《检查和更新NPM包》 检查和更新 NPM 包 TL;DR; 用于检查和更新软件包的 NPM 命令# [](#npm-outdated)npm outdatednpm updatenpm update --save-dev --savenpm update -g npm-check-updates 检查和更新软件包的命令npm install -g npm-check-updatesnpx np…

Idea Community社区版如何添加Run Dashboard

最近在学习spring cloud,跟着视频添加run dashboard,发现里面介绍的方法无法适用于idea community(社区版)。 然后自己研究了一下,成功添加,下面分享自己的方法。 如图,我的项目里添加了两个module,我想通…

kubeadm部署k8s1.27.2版本高可用集群(外部etcd集群带TLS认证)

文章目录 环境软件版本服务器系统初始化etcd 证书生成etcd集群部署负载均衡器部署部署k8s集群部署网络组件FAQ 环境 控制平面节点主机的配置最少是2C2G,否则kubeadm init的时候会报错 主机名IP组件系统os128192.168.177.128etcd、kube-apiserver、kube-controller-manager、k…

Cesium for Unity包无法加载

太上老君急急如律⚡令⚡ 🥙关闭UnityHub🧀启动梯子🥪cmd 启动UnityHub 🥙关闭UnityHub 🧀启动梯子 🥪cmd 启动UnityHub 把批处理启动文件👈中的exe的路径换成自己的安装目录!保存…

前端项目对接protobufjs的时候,踩坑总结

Protobuf(Protocol Buffers)是一种用于序列化结构化数据的语言无关、平台无关、可扩展的机制。在JS/TS项目中,使用WebSocket与Protobuf可以实现高效的通信和数据传输。protobufjs官方仓库:https://github.com/protobufjs/protobuf.js 安装pro…

SpringBoot-多数据源切换和事物处理(免费)

作者原始文章: SpringBoot-多数据源切换和事物处理 最新内容和改动请看上面的文章 安装 <dependency><groupId>com.gitee.huanminabc</groupId><artifactId>dynamic-datasource</artifactId><version>1.0.3-RELEASE</version> <…

算法训练day21Leetcode530二叉搜索树的最小绝对差501二叉搜索中的众数236二叉树最近公共祖先

530 二叉搜索树的最小绝对差 题目描述 https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/ 我的想法 中序遍历二叉树存入数组&#xff0c;再遍历数组求节点之间的最小差值 我的acm模式代码 #include <iostream> #include <vector&g…

几款提高开发效率的Idea 插件

1、ignore 开发代码过程中经常会有一些需要提交到代码仓库的文件&#xff0c;比如java文件生成的.class、.jar 等&#xff0c;如果将编译后的文件都提交到代码库那么代码库会很大&#xff0c;关键是没有必要。 这款插件就可以很方便的解决某类文件或者某个文件夹不需要提交到…

密闭空间可燃气体监测终端:守护燃气管网安全

在这个瞬息万变的时代&#xff0c;燃气安全问题始终是我们关注的焦点。地下燃气管线因老化或腐蚀等造成燃气泄漏&#xff0c;并扩散至地下管沟、窨井等相邻空间&#xff0c;引发爆炸的风险&#xff0c;尤其在密闭空间中潜在的危险常常不易察觉&#xff0c;但一旦发生事故&#…

ROS学习笔记10——自定义源文件调用

调用自定义源文件的时候需要配置cmakelists文件&#xff0c;刚学感觉还挺繁琐&#xff0c;用一个小案例记录一下。 1、随便写个头文件 在功能包的 include/功能包名 目录下创建一个头文件 记得在 .vscode 下 c_cpp_properties.json 的 includepath属性中把路径加进去 #ifnd…

OpenCV书签 #余弦相似度的原理与相似图片/相似文件搜索实验

1. 介绍 余弦相似度&#xff08;Cosine Similarity&#xff09;&#xff0c;又称为余弦相似性&#xff0c;是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度仅仅与向量的指向方向相关&#xff0c;与向量的长度无关&#xff0c;它将向量根据坐标值绘制到向量空间…

HJ10 字符个数统计【C语言】

【华为机试题 HJ10】字符个数统计 描述输入描述:输出描述:示例1示例2参考代码1描述 编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次 例…

1130 - Host 182.244.45,94‘ is not allowed to connect to this MySQL server

1130 - Host 182.244.45,94’ is not allowed to connect to this MySQL server MySQL错误代码 1130 表明连接 MySQL 服务器的主机被拒绝。在这个错误消息中&#xff0c;你提到的是主机 “182.244.45.94”&#xff0c;但可能有一个小错误&#xff0c;IP 地址中的逗号应该是点&…

5、直方图和密度图(数据分布)

创建直方图和密度图 在本教程中,您将了解有关直方图和密度图的所有知识。 文章目录 1、设置笔记本2、直方图3、密度图4、2D KDE 图4、颜色编码的图1、设置笔记本 我们首先设置编程环境。(此代码是隐藏的,但你可以通过点击此文本右侧的 “Code” 按钮来显示它。) In [1]: i…

SpringBoot3集成Zookeeper

一、简介 ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步、提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。 二、环境搭建 1、修改配置文件 # 1、拷贝一份样本配置文件 cp zookeeper-3.8.3/conf/zoo_sample.cfg zookeeper-3.8.3/conf/…

【笔记】Android Telephony | SIM 卡管理和subId、slotId、phoneId 定义关系说明

相关业务背景 DSDS双卡双待 &#xff1a;手机可以插入两张手机卡&#xff0c;而且能同时待机&#xff0c;但是某一时刻只能有一张卡上有电话。 一个SIM卡代表一个账号&#xff0c;那么双卡手机就意味着多账户&#xff0c;需要增加多账户管理和业务处理。 账号管理&#xff1…