首页/数据/数据工程与 ETL 速查/DataX:批式数据同步与 job.json
CDC 与同步53 条

DataX:批式数据同步与 job.json

DataX 是阿里开源的离线数据同步工具(Java),用 job.json 描述 reader 到 writer 的搬运,插件覆盖 MySQL、Oracle、Hive、HDFS、Kafka、ClickHouse 等数据源;channel 控制并发,适用于数仓开荒导入与临时取数,但它是批式抽取,不具备日志型 CDC 的实时与删除捕获能力。

DataX 是什么

DataX 是阿里开源的离线数据同步工具(Java 实现),用一份 job.json 描述从 reader 到 writer 的搬运,插件覆盖 MySQL、Oracle、SQL Server、Hive、HDFS、Kafka、ClickHouse 等数据源。它把「读哪个源、写到哪里、如何切分并发」都收敛到配置里,适合开荒导入与临时取数。

它是批式抽取

DataX 按批次读取数据后一次性写入目标,不具备日志级 CDC 的实时性与删除捕获能力。用它做增量,只能依赖时间戳字段,因此源端的物理删除无法感知。需要实时同步或删除捕获时,应改用 CDC 方案。

基本信息

定位离线批式数据同步工具
配置方式job.json 描述 setting(并发与容错)与 content(reader/writer)
并发控制speed.channel 指定并发通道数
切分键splitPk 指定后按该列切分并行抽取
运行方式python bin/datax.py job.json
能力边界批式抽取,不具备实时与物理删除捕获

关键配置读法

配置作用注意
speed.channel并发通道数受源库与目标端承载能力限制
splitPk按该列切分并行读取只支持整数或字符串类型的字段,不配则单通道顺序读
errorLimit允许的错误记录数与比例设为 0 表示一条错就失败,适合强一致场景
reader.column需要抽取的列清单显式列出,避免源表加列导致同步结果变化
writer目标端写入插件与参数写入模式决定是否覆盖或追加

典型使用场景

  • 数仓开荒:把业务库存量数据一次性导入贴源层
  • 异构迁移:MySQL 到 Hive、Oracle 到 ClickHouse 等跨源搬运
  • 临时取数:为专项分析抽取一份快照数据
  • 小表整表同步:数据量可控时用全量覆盖最简单
  • 历史补数:按日期区间反复同步一段时间的数据

job.json 骨架

job.json 骨架
{
  "job": {
    "setting": {
      "speed": { "channel": 3 },
      "errorLimit": { "record": 0, "percentage": 0.02 }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "ro_user", "password": "***",
            "column": ["id", "amount", "created_at"],
            "splitPk": "id",
            "where": "created_at >= '2026-10-01 00:00:00'",
            "connection": [
              { "jdbcUrl": ["jdbc:mysql://10.0.0.5:3306/app"], "table": ["orders"] }
            ]
          }
        },
        "writer": {
          "name": "hdfswriter",
          "parameter": { "path": "/warehouse/ods/orders", "fileType": "text" }
        }
      }
    ]
  }
}

运行任务

运行任务
# 直接运行,输出同步条数、失败条数与耗时统计
python bin/datax.py job.json

# 先看配置是否合法(部分版本提供 -m 干跑),避免直接对生产库发起抽取
python bin/datax.py -m job.json
splitPk 是并行抽取的关键:不配置时按单通道顺序读取,大表抽取会很慢;配置时应选分布均匀的整型或字符串主键,避免用取值集中的列导致通道间负载不均。
直连生产库跑大表全量且不限流,会明显拉高源库 IO 与连接数:优先连从库,或用 where 条件分片、限制并发通道数分批执行。

易错点

  • 直连生产库跑大表全量且不限制并发通道,源库 IO 与连接数飙升,影响线上业务
  • 对含删除语义的表做增量抽取:批式抽取捕获不到物理删除,目标端残留已删除数据,需要周期全量或改走 CDC
  • splitPk 选了取值高度集中的列,通道之间负载严重不均,实际只有一条通道在跑
  • reader 不显式列出字段而使用通配,源表新增列后目标端结构或顺序发生变化

数据来源与参考

  • DataX 官方文档(alibaba/DataX:job 配置与插件)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌