1 引言
DataX 是一个异构数据源离线同步工具,主要应用与不同数据源之间的数据同步
根据官方的架构图

Datax主要分为三个模块
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
2 Datax运行流程图

3 DataX源码分析
3.1 核心架构与框架设计
DataX 的运行时围绕“容器 + 插件”的分层设计展开:命令行入口 Engine 负责解析作业配置、绑定插件元数据,并根据运行模式实例化 JobContainer 或 TaskGroupContainer,之后统一初始化性能跟踪并启动对应容器。容器层对外提供统一的生命周期,而具体的读写与数据搬运逻辑则完全由插件实现,实现了控制面与数据面的解耦。
整体的数据链路大致为:
Engine(入口)→ JobContainer(作业编排)→ Scheduler(全局调度)→ TaskGroupContainer/TaskExecutor(并发执行)→ Channel + 插件(数据读写)
核心类
JobContainer:作为作业级 Master,串联preHandle → init → prepare → split → schedule → post/postHandle → destroy/statistics的全生命周期;其中会加载 Reader/Writer 的 Job 实例、执行预检查、按速率限制计算所需 Channel 数、并调用JobAssignUtil公平分配 taskGroup 后启动调度器。AbstractScheduler/StandAloneScheduler:调度层收集 TaskGroup 状态、定期上报、进行错误阈值校验,并根据状态触发失败/终止处理,保证所有任务都被正确调度和回收。TaskGroupContainer:在工作线程中维护任务队列、失败重试和周期汇报,依据 Channel 上限启动TaskExecutor,并在异常或完成时汇总通信状态。TaskGroupContainer.TaskExecutor:Task 内部执行器,将一个 Reader/Writer Task 与共享的Channel绑定;分别构建ReaderRunner、WriterRunner线程,注入通信器、脏数据收集器以及(可选)Transformer 管道,从而实现 1:1 的读写配对和数据流转。
3.1.1 Engine启动与配置解析
Engine启动流程
- 命令行入口
Engine.entry使用 Commons CLI 定义--job/--jobid/--mode参数并解析,随后调用ConfigParser.parse读取作业配置,同时初始化多语言资源包。 - 如果用户未显式提供
jobId,入口会尝试从历史调度 URL 中提取;在非standalone模式下强制要求得到有效的 jobId,并将其写回配置对象供后续组件使用。 - 在真正启动容器前,入口打印当前 JVM 信息以及脱敏后的作业 JSON(会对
password/accessKey等字段打码),然后调用ConfigurationValidate.doValidate做最基本的非空校验并进入start。 - 若
entry抛出异常,main会根据FrameworkErrorCode转成进程退出码,并输出经ExceptionTracker处理的堆栈,保证脚本层能感知失败原因。