DataX离线批量同步架构详解
请介绍阿里巴巴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)
三、数据传输流程:
- Job拆分:按分片(Split)将Job拆为多个Task
- MySQL:按主键范围或
where条件分片 - HDFS:按文件/目录拆分
- MySQL:按主键范围或
- Task执行:每个Task启动Reader→Channel→Writer的Pipeline
- 数据流:Reader拉取数据→Channel传输→Writer写入
- 监控:实时统计吞吐量、失败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+插件