DataX简介
DataX 是阿里巴巴开源的一款轻量级的数据同步工具,旨在解决异构数据源之间的数据传输问题。它支持多种数据源,包括关系型数据库、NoSQL 数据库、Hadoop、FTP、消息队列等。DataX 的设计目标是提供一个简单、稳定、高效的数据同步解决方案,帮助用户轻松实现不同数据源之间的数据交换。
产生背景
DataX 的产生背景与阿里巴巴内部对大规模数据同步需求的增长密切相关。在阿里巴巴的业务发展过程中,数据的体量和复杂性不断增加,传统的数据同步方式已经无法满足快速变化的业务需求。以下是 DataX 产生的几个主要背景因素:
- 多样化的数据源:阿里巴巴内部有多种不同类型的数据源,包括关系型数据库、NoSQL 数据库、大数据平台(如 Hadoop)、云存储等。不同的数据源之间需要高效的数据同步和集成,以支持复杂的业务分析和决策。
- 大规模数据处理:随着业务的增长,阿里巴巴需要处理的数据量也在急剧增加。这就要求一个能够高效处理大规模数据的同步工具,确保数据在各个系统之间的快速流转。
- 实时性和可靠性:业务对数据的实时性要求越来越高,数据同步工具需要具备快速响应能力。同时,数据传输的可靠性和稳定性也是关键,任何数据丢失或错误都会对业务产生重大影响。
- 自动化和易用性:数据同步任务需要能够方便地进行配置和管理,以降低运维成本和人工干预。一个自动化、易于使用的工具可以极大提高工作效率。
- 开放性和扩展性:随着数据技术的不断发展,新型的数据源和存储方式不断涌现。数据同步工具需要具备良好的开放性和扩展性,以便快速适应新的技术趋势。
基于这些需求,阿里巴巴开发了 DataX 作为一个统一的数据同步解决方案。它最初是为了解决阿里巴巴内部的数据同步问题而设计的,但随着时间的推移,DataX 的功能和稳定性得到了充分验证,最终被开源,供更广泛的用户使用。这也使得 DataX 成为一个广受欢迎的数据同步工具,被许多企业用于解决复杂的数据集成和迁移问题。
主要特点
- 多源支持:DataX 支持多种数据源,如 MySQL、Oracle、SQL Server、PostgreSQL、HDFS、Hive、ODPS、MongoDB、FTP 等,能够适应大多数场景的数据同步需求。
- 易于使用:提供了简单易懂的 JSON 配置文件,用户只需编写少量配置即可完成数据同步任务。支持命令行操作,方便集成到自动化运维脚本中。
- 高效性能:DataX 采用多线程并发技术,提高数据传输速度。支持数据切分和批量传输,优化大数据量传输性能。
- 稳定可靠:提供了完善的错误处理机制,确保数据传输的可靠性。支持断点续传,避免因网络或其他原因导致的数据传输中断。
- 扩展性强:DataX 提供了丰富的插件机制,用户可以根据需求开发自定义插件,支持更多数据源或功能。
工作原理
DataX 的核心思想是通过 Reader 和 Writer 插件实现数据的读写分离。Reader 负责从源数据源读取数据,而 Writer 负责将数据写入目标数据源。DataX 的运行流程主要包括以下几个步骤:
- 任务配置:用户通过 JSON 配置文件定义数据同步任务,包括数据源类型、连接信息、字段映射等。
- 任务启动:通过命令行工具启动 DataX 任务,DataX 根据配置文件加载相应的 Reader 和 Writer 插件。
- 数据读取:Reader 从源数据源中读取数据,并将其转化为 DataX 的内部数据格式。
- 数据转换:在数据传输过程中,DataX 支持对数据进行简单的转换和处理,如字段筛选、类型转换等。
- 数据写入:Writer 接收转换后的数据,并将其写入目标数据源。
- 任务监控:DataX 提供了详细的日志和监控信息,帮助用户跟踪任务的执行状态和性能。
使用场景
- 数据迁移:在数据库升级或更换时,将数据从旧系统迁移到新系统。
- 数据备份:定期将生产环境的数据备份到安全存储中。
- 数据集成:在大数据分析场景中,将多种数据源的数据整合到数据仓库中。
- 数据同步:保持不同系统之间的数据一致性,支持双向或单向的数据同步。
DataX 作为一个通用的数据同步工具,其灵活性和扩展性使其在各种数据处理场景中得到了广泛应用。
DataX支持的数据源
类型 | 数据源 | Reader(读) | Writer(写) |
RDBMS 关系型数据库 | MySQL | √ | √ |
Oracle | √ | √ | |
OceanBase | √ | √ | |
SQLServer | √ | √ | |
PostgreSQL | √ | √ | |
DRDS | √ | √ | |
Kingbase | √ | √ | |
通用RDBMS(支持所有关系型数据库) | √ | √ | |
阿里云数仓数据存储 | ODPS | √ | √ |
ADB | √ | ||
ADS | √ | ||
OSS | √ | √ | |
OCS | √ | ||
Hologres | √ | ||
AnalyticDB For PostgreSQL | √ | ||
阿里云中间件 | datahub | √ | √ |
SLS | √ | √ | |
图数据库 | 阿里云 GDB | √ | √ |
Neo4j | √ | ||
NoSQL数据存储 | OTS | √ | √ |
Hbase0.94 | √ | √ | |
Hbase1.1 | √ | √ | |
Phoenix4.x | √ | √ | |
Phoenix5.x | √ | √ | |
MongoDB | √ | √ | |
Cassandra | √ | √ | |
数仓数据存储 | StarRocks | √ | √ |
ApacheDoris | √ | ||
ClickHouse | √ | √ | |
Databend | √ | ||
Hive | √ | √ | |
kudu | √ | ||
selectdb | √ | ||
无结构化数据存储 | TxtFile | √ | √ |
FTP | √ | √ | |
HDFS | √ | √ | |
Elasticsearch | √ | ||
时间序列数据库 | OpenTSDB | √ | |
TSDB | √ | √ | |
TDengine | √ | √ |
DataX的架构
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
DataX 3.0 开源版本支持单机多线程模式完成同步作业运行,按一个DataX作业生命周期的时序图,从整体架构设计非常简要说明DataX各个模块相互关系。
核心模块介绍:
- DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
- DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
- 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
- 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
- DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0
DataX调度流程:
举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:
- DataXJob根据分库分表切分成了100个Task。
- 根据20个并发,DataX计算共需要分配4个TaskGroup。
- 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。
参考链接: