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.jsonsplitPk 是并行抽取的关键:不配置时按单通道顺序读取,大表抽取会很慢;配置时应选分布均匀的整型或字符串主键,避免用取值集中的列导致通道间负载不均。
直连生产库跑大表全量且不限流,会明显拉高源库 IO 与连接数:优先连从库,或用 where 条件分片、限制并发通道数分批执行。