0
点赞
收藏
分享

微信扫一扫

DataX 简介及架构原理

乌龙茶3297 2022-02-03 阅读 51

DataX 简介及架构原理

在这里插入图片描述

概述


  • DataX是阿里巴巴使用 Java 和 Python 开发的一个异构数据源离线同步工具

    • 异构数据源不同存储结构的数据源
  • 致力于实现包括关系型数据库 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种异结构数据源之间稳定高效的数据同步功能

	- Sqoop 是用于在与 RDBMS 之间数据迁移工具
	- DataX 是阿里开源的一个异构数据源离线同步工具(任意两种数据源之间)

图解

在这里插入图片描述

DataX 设计理念


  • 1、为了解决异构数据源同步问题DataX复杂的网状的同步链路变成了星型数据链路DataX作为中间传输载体负责链接各种数据源

  • 2、当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,变能跟已有的数据源做到无缝数据同步

DataX 框架设计


1、DataX 本身作为离线数据同步框架,采用 Framework + plugin 架构构建

  • Framework 主题框架+ plugin 插件
  • 1、将软件核心功能写入 Framework 主体框架
  • 2、主体框架为插件预留接口,如果后期需要什么新功能,可以再去开发插件实现,而主体框架无需改动
	- 扩展性强
	- 1、数据同步核心功能为主题
	- 2、不断的去新增某数据源的支持,对不同数据源的读取或写入功能,以插件的形式开发 
	- 3、如果需要新功能只需要开发插件即可,不需要动主体框架

2、将数据源读取和写入抽象成为 Reader/Writer 插件,纳入到整个同步框架中

在这里插入图片描述

架构功能详解


分类

  • Reader数据采集模块

    • 负责采集数据源的数据,将数据发送给Framework
  • Writer数据写入模块

    • 负责不断向 Framework 取数据,并将数据写入到目的端
  • Framework用于连接 reader 和 writer

    • 作为两者的数据传输通道
    • 并处理缓冲、流控、并发、数据转换等核心技术问题

Framework 功能说明

  • 缓冲

    • 1、ReaderWriter 可能会有读写速度不一致的情况
    • 2、所以中间需要一个组件作为缓冲,缓冲的功能就位于 Framework 中
  • 流控

    • 1、流控:控制数据传输的速度
    • 2、Sqoop 不具备流控功能
    • 3、DataX 可以随意根据需求调整数据传输速度
    • 4、流控功能也位于 Framework 中
  • 并发

    • 1、并发同步或写入数据
    • 2、也可以控制速度,想要速度快点,设置并发高一点,反之亦然
  • 数据转换

    • 1、既然是异构,那么说明读 Reader 的数据源与 写 Writer 的数据源 数据结构可能不同
    • 2、数据结构不同的话,需要做数据转换操作,转换也在 Framework 中完成

![在这里插入图片描述](https://img-blog.csdnimg.cn/d5e7559ccd2d4b4fbf73c9f56256499f.png

DataX 的运行流程


说明

  • DataX 作业生命周期的时序图

结构

  • Job

    • 单个数据同步的作业,称为一个Job一个Job启动一个进程
  • Task

    • 1、根据不同数据源切分策略一个Job切分多个Task

      • 并行执行
    • 2、TaskDataX作业的最小单元,每个Task负责一个部分数据的同步工作

  • TaskGroup

    • 1、Scheduler 调度模块对Task 进行分组每个Task 组称为一个Task Group
    • 2、每个Task Group 负责以一定的并发度运行其所分得的Task ,单个TaskGroup的并发为5
  • Reader -> Channel -> Writer

    • 每个Task启动后,都会固定启动 Reader -> Channel -> Writer 的线程来完成工作

      • Channel 类似于 Flume 中的 MemoryChannel 来做数据的缓冲

具体流程

  • 1、DataX同步数据的作业称之为一个Job
  • 2、一个Job会根据不同数据源的策略,将Job切分为多个Task
  • 3、Task 是执行同步数据作业的最小单元每个Task会负责一部分的数据同步工作
  • 4、多个Task是如何执行的呢,谁先执行谁后执行呢?
  • 5、由Schedule 调度模块对Task 进行分组,每个组称之为一个Task Group
  • 6、每个组都有一个并发度,一个组并发度是5
  • 7、最多情况下一个Task Group,能够同时运行5 个Task
  • 8、每个Task启动后,都会固定启动Reader -> Channel -> Writer线程来完成工作

DataX 调度决策思路


案例

- 1、用户提交了一个DataX 作业,并且配置了总的并发度为 20,
- 2、目的是对一个 有100张分表的 mysql 数据源进行同步
  • DataX 的调度决策思路

    • 1、DataX Job 根据分库分表切分策略,将同步工作分成 100个Task
    • 2、根据配置的总的并发度20,以及每个Task Group 的并发度 5,
    • 3、DataX 计算共需要分配 4的Task Group
    • 4、4个 TaskGroup 平分 100 个Task ,每一个TaskGroup 负责运行 25个Task

描述

  • 1、总的并发度为20

    • 1、整个Job 的并发度
    • 2、表示整个Job 最多能同时运行 20个Task
  • 2、什么是分表

    • 1、如果 MySQL 中单表的数据量过大,它的性能会急剧下降

    • 2、解决方法

      • 1、分表,将一张表的数据分到多张表中
      • 2、每张表的结构一致
      • 3、类似于对表做 Hash分区
    • 3、描述

      • 1、物理分区,逻辑还是同一张表
      • 2、所以DataX 需要将每张分表的数据都同步过来

.

举报

相关推荐

0 条评论