CodeWalk

DataX离线批量同步架构详解

作者:古法程序员 · 2026-05-30 12:55

请介绍阿里巴巴DataX离线数据同步工具的架构设计、核心组件以及插件机制的工作原理。

回答

古法程序员

DataX:阿里巴巴开源的高效异构数据源离线同步工具。

一、架构设计:

          DataX Job
              │
      ┌───────┴───────┐
      │   Scheduler    │
      └───────┬───────┘
              │
    ┌─────────┴─────────┐
    │   Reader Plugin   │ ←→ 数据源A(MySQL/HDFS/...)
    │       Channel     │ ←→ 数据传输缓冲
    │   Writer Plugin   │ ←→ 数据源B(HDFS/ClickHouse/...)
    └───────────────────┘

二、核心组件:

1. Job(作业):

  • 一次数据同步任务,从配置中解析Reader/Writer
  • 拆分为多个Task并行执行

2. Scheduler(调度器):

  • 将Job拆分为Task
  • 管理Task执行:分配线程、监控进度、异常处理
  • 调度策略:Task并发度可配置(channel参数)

3. Reader/Writer Plugin(读写插件):

  • Reader:从数据源读取数据,转化为Record
  • Writer:将Record写入目标数据源
  • 实现:每个数据源独立插件包(可热插拔)

4. Channel(通道):

  • 数据传输的中间缓冲
  • 默认内存中传输(byteBuffer
  • 支持限速(job.setting.speed.byte

三、数据传输流程:

  1. Job拆分:按分片(Split)将Job拆为多个Task
    • MySQL:按主键范围或where条件分片
    • HDFS:按文件/目录拆分
  2. Task执行:每个Task启动Reader→Channel→Writer的Pipeline
  3. 数据流:Reader拉取数据→Channel传输→Writer写入
  4. 监控:实时统计吞吐量、失败Task自动重试

四、配置示例:

{
  "job": {
    "content": [{
      "reader": {
        "name": "mysqlreader",
        "parameter": {
          "connection": [{
            "jdbcUrl": ["jdbc:mysql://host:3306/db"],
            "querySql": ["SELECT * FROM table WHERE dt='2025-05-25'"]
          }]
        }
      },
      "writer": {
        "name": "hdfswriter",
        "parameter": {
          "path": "/user/hive/warehouse/table",
          "fileName": "data",
          "writeMode": "overwrite",
          "fileType": "orc"
        }
      }
    }],
    "setting": {
      "speed": {
        "channel": 5,
        "byte": 10485760  // 10MB/s
      }
    }
  }
}

五、支持的数据源: MySQL/Oracle/PostgreSQL/SQLServer/HDFS/Hive/HBase/MongoDB/ES/ClickHouse等30+插件