器→工具, 开源项目

异构数据同步工具DataX

钱魏Way · · 0 次浏览

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。

参考链接:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注