Skip to content

DataX 数据同步

DataX 是阿里开源的异构数据源离线同步工具,支持将数据从各种源有效地同步到目标存储。OraAI 平台集成了 DataX 功能,使您能够轻松地配置和管理数据同步任务。

功能特点

  • 丰富的数据源支持:支持 MySQL、PostgreSQL、SQLServer 等多种数据源
  • 高性能:使用框架式设计,支持多通道数据抽取和加载,提高同步效率
  • 可靠性:内置完善的任务监控和异常处理机制
  • 易扩展:插件化架构设计,方便扩展新的数据源

系统要求

  • JDK 1.8+
  • Python 3.x
  • 至少 1GB 内存
  • Linux、Mac OS 或 Windows 操作系统

下载与安装

您可以使用以下链接下载 DataX 工具包:

https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz

安装步骤

  1. 下载 DataX 压缩包
  2. 解压到您的工作目录:
shell
tar -zxvf datax.tar.gz
  1. 确保您的系统已安装 JDK 1.8+ 和 Python

目录结构

解压后的 DataX 目录结构如下:

datax
|-- bin/                 # 脚本目录
|   |-- datax.py         # 启动脚本
|-- conf/                # 系统配置
|-- job/                 # 任务配置模板
|-- plugin/              # 插件目录
|-- script/              # 辅助脚本
|-- log/                 # 日志目录
|-- lib/                 # 依赖库
|-- README.md            # 说明文档

快速开始

运行示例任务

进入 bin 目录,即可运行同步作业:

shell
python3 /home/datax/bin/datax.py /home/datax/job/job.json

执行后,您将看到类似以下的输出:

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.

2025-07-24 19:47:43.573 [main] INFO  MessageSource - JVM TimeZone: GMT+08:00, Locale: zh_CN
...
任务启动时刻                    : 2025-07-24 19:47:43
任务结束时刻                    : 2025-07-24 19:47:54
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

配置指南

常用读写器

读取器(Reader)

读取器描述主要参数
MySQLReader读取 MySQL 数据username, password, column, connection
PostgreSQLReader读取 PostgreSQL 数据username, password, column, connection
SQLServerReader读取 SQLServer 数据username, password, column, connection
TextFileReader读取文本文件path, column, encoding

写入器(Writer)

写入器描述主要参数
MySQLWriter写入 MySQL 数据username, password, column, connection, writeMode
PostgreSQLWriter写入 PostgreSQL 数据username, password, column, connection, writeMode
TextFileWriter写入文本文件path, fileName, writeMode, encoding

命令行参数

DataX 支持以下命令行参数:

shell
python datax.py [options] job.json

常用选项:

  • -j,-job <job_config>: 指定任务配置文件
  • -p,-params <params>: 自定义参数,格式如 "-p"-DparamKey=paramValue
  • -r,-reader <reader>: 指定读插件名称
  • -w,-writer <writer>: 指定写插件名称
  • -c,-channel <channel>: 指定任务并发数
  • -l,-limit <limit>: 指定抽取数据的限制数量

在 OraAI 平台中使用 DataX

  1. 在 OraAI 平台中创建同步任务
  2. 选择源数据和目标数据系统
  3. 配置同步参数和调度策略
  4. 提交并监控同步任务

常用场景示例

SQLServer 到 StarRocks 同步

json
{
    "job": {
        "setting": {
            "speed": {
                "channel": 1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "sqlserverreader",
                    "parameter": {
                        "username": "SA",
                        "password": "yourStrong@assword",
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:sqlserver://192.168.31.111:1433;databaseName=蓝海实业集团;encrypt=true;trustServerCertificate=true"
                                ],
                                "querySql": [
                                    "SELECT PO.FID AS ORDER_ID, PO.FBILLTYPEID AS BILL_TYPE_ID, PO.FBILLNO AS BILL_NO, PO.FDATE AS ORDER_DATE, PO.FSUPPLIERID AS SUPPLIER_ID, PO.FPURCHASEDEPTID AS PURCHASE_DEPT_ID, PE.FMATERIALID AS MATERIAL_ID, PE.FSALQTY AS SAL_QTY, PE.FSTOCKQTY AS STOCK_QTY FROM T_PUR_POORDER PO JOIN T_PUR_POORDERENTRY PE ON PO.FID = PE.FID"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "starrockswriter",
                    "parameter": {
                        "loadUrl": ["8.8.8.8:8030"],
                        "jdbcUrl": "jdbc:mysql://8.8.8.8:9030/dbt_dwm",
                        "username": "root",
                        "password": "******",
                        "database": "dbt_dwm",
                        "table": "T_PUR_POORDER",
                        "writeMode": "insert",
                        "column": ["ORDER_ID", "BILL_TYPE_ID", "BILL_NO", "ORDER_DATE", "SUPPLIER_ID", "PURCHASE_DEPT_ID", "MATERIAL_ID", "SAL_QTY", "STOCK_QTY"],
                        "batchSize": 10240,
                        "timeout": 60
                    }
                }
            }
        ]
    }
}

性能调优

并发调优

通过设置 channel 参数控制任务并发数:

json
"setting": {
  "speed": {
    "channel": 5  // 设置为 5 个并发通道
  }
}

速度限制

可以设置传输速率限制,避免对源库造成过大压力:

json
"setting": {
  "speed": {
    "channel": 3,
    "byte": 1048576  // 限制为每秒 1MB
  }
}

错误处理

设置容错率,当错误记录数超过阈值时任务失败:

json
"setting": {
  "errorLimit": {
    "record": 100,  // 错误记录数超过 100 条时任务失败
    "percentage": 0.02  // 错误比例超过 2% 时任务失败
  }
}

最佳实践

  • 根据数据量和服务器资源合理配置并发数
  • 对于大表同步,建议使用增量同步策略(WHERE 条件过滤)
  • 定期监控同步任务执行情况,及时处理异常
  • 对于关键任务配置错误告警和自动重试
  • 使用 DataX 内置的脏数据收集功能记录同步异常数据

常见问题

Q: 如何处理数据类型转换问题?

A: DataX 会自动进行基本的类型转换,但对于特殊类型(如时间戳),建议在配置中明确指定类型映射关系。

Q: 同步任务失败如何处理?

A: 查看日志确认失败原因,常见问题包括网络连接中断、权限不足或数据格式错误等。解决对应问题后可重新执行任务。

Q: 如何提高同步效率?

A: 增加并发通道数、合理拆分任务、优化数据库查询(添加索引、优化 SQL)、使用更高配置的服务器。

Q: 如何处理增量同步?

A: 使用 where 条件和时间戳、自增 ID 等字段实现增量同步,结合调度系统定时执行。

Q: DataX 是否支持实时同步?

A: DataX 主要用于批量离线数据同步,不支持实时同步。对于实时需求,可考虑使用 Canal、Debezium 等工具。