当前位置: 首页 > news >正文

【大数据精讲】全量同步与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超时等。

相关文章:

  • (2)(2.4) CRSF/ELRS Telemetry
  • 2024免费mathtype7.4.4安装注册步骤教程
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024
  • 【GitHub项目推荐--微软开源的课程(Web开发课程/机器学习课程/物联网课程/数据科学课程)】【转载】
  • openssl3.2/test/certs - 004 - cross root and root cross cert
  • Hadoop安装配置HBase
  • [设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
  • 【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。
  • vue中使用锚点定位
  • 项目实战——Qt实现FFmpeg音视频转码器
  • Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件
  • initdb: command not found【PostgreSQL】
  • TCP/IP四层模型对比OSI七层网络模型的区别是啥?数据传输过程原来是这样的
  • 【C++】list容器功能模拟实现
  • Spring Boot整合MyBatis-Plus
  • 【BBuf的CUDA笔记】十三,OpenAI Triton 入门笔记一
  • NLP自然语言处理原理应用讲解
  • LeetCode59 螺旋矩阵 II
  • k8s---ingress对外服务(traefik)
  • C# 基础入门
  • 美国4月CPI同比上涨2.3%低于预期,为2021年2月来最小涨幅
  • 中国恒大:清盘人向香港高等法院申请撤回股份转让
  • 上海国际电影节特设“今日亚洲”单元
  • 巴基斯坦空袭印度多地空军基地,巴战机进入印领空
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 方正证券总裁何亚刚到龄退休,54岁副总裁姜志军接棒