Files
aiData/DataX/说明.md
HuangHai 1f4d29d5a1 'commit'
2026-02-06 08:21:47 +08:00

5.6 KiB
Raw Blame History

DataX 同步部署与使用说明

一、下载与安装 DataX

  1. 下载 DataX 包 官方下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz

  2. 部署到服务器 将压缩包上传并解压到 /usr/local/ 目录:

    cd /usr/local
    tar zxvf datax.tar.gz
    # 解压后应当存在 /usr/local/datax 目录
    

二、配置部署

本方案通过一套脚本支持 DorisMySQL 的同步,并统一了 JSON 配置目录。

  1. 环境准备 (重要) 高性能同步工具依赖 Python 的 MySQL 驱动,请先在服务器执行以下命令安装:

    # Rocky Linux / CentOS 9
    yum install -y python3-PyMySQL
    
    # 验证安装 (返回“成功”即表示OK)
    python3 -c "import pymysql; print('成功')"
    
  2. 上传文件 请将本地 d:\dsWork\aiData\DataX\ 目录下的以下内容上传至服务器 /usr/local/datax/ 根目录下:

    • 文件夹 json/ (存放统一的 JSON 模板)
    • 文件夹 tool/ (存放高性能导入工具)
    • 脚本 run_jobs_full.sh (全量执行脚本)
    • 脚本 run_jobs_inc.sh (增量执行脚本)
    • 脚本 start_cron_inc.sh(启动定时任务)
    • 脚本 stop_cron_inc.sh (停止定时任务)

    上传后的服务器目录结构应如下所示:

    /usr/local/datax/
    ├── bin/
    ├── conf/
    ├── json/            <-- 统一配置目录 (包含全量/增量通用模板)
    ├── tool/            <-- 导入工具目录 (包含 LoadCsvToMysql.py)
    ├── run_jobs_full.sh <-- 全量同步脚本 (支持 doris/mysql)
    ├── run_jobs_inc.sh  <-- 增量同步脚本 (支持 doris/mysql)
    ├── start_cron_inc.sh<-- 启动增量定时任务
    └── stop_cron_inc.sh <-- 停止增量定时任务
    
  3. 赋予执行权限

    cd /usr/local/datax
    chmod +x *.sh
    

三、运行策略说明

脚本现在支持通过参数指定同步目标:dorismysql

1. 全量同步 (Full Sync)

  • 适用场景:系统初始化,或数据需要彻底重刷。
  • 同步逻辑
    1. Doris: 使用 TRUNCATE 清空目标表,通过 Stream Load 写入。
    2. MySQL: 自动切换为 CSV Load 模式(高性能),通过生成 CSV 并执行 LOAD DATA LOCAL INFILE 实现秒级同步。
  • 执行命令
    ./run_jobs_full.sh doris  # 同步到 Doris
    ./run_jobs_full.sh mysql  # 同步到 MySQL 
    

2. 增量同步 (Incremental Sync)

  • 适用场景:日常实时数据同步。
  • 同步逻辑
    1. 动态 SQL: 自动解析模板并生成 ORDER BY id DESC LIMIT 1000 查询。
    2. Upsert: 利用目标库主键模型自动完成“存在即更新,不存在即插入”。
  • 执行命令
    ./run_jobs_inc.sh doris   # 同步到 Doris
    ./run_jobs_inc.sh mysql   # 同步到 MySQL 
    

四、自动化定时任务配置

增量同步已优化为 高频实时同步

  1. 启动定时任务

    ./start_cron_inc.sh doris  # 启动同步到 Doris 的任务
    ./start_cron_inc.sh mysql  # 启动同步到 MySQL 的任务
    
    • 执行频率: 每 5 秒 执行一次。
    • 单次数据量: 每次同步最新的 1000 条
  2. 停止定时任务

    ./stop_cron_inc.sh doris
    ./stop_cron_inc.sh mysql
    
  3. 验证与日志

    • 查看任务crontab -l
    • 查看日志:日志保存在 logs/ 目录下。
    tail -f logs/datax_inc_mysql_cron.log
    

五、重要性能说明与测试报告

本方案针对 MySQL 到 MySQL/Doris 的同步进行了深度榨干级的性能优化,实测效果惊人。

1. 性能实测报告 (2026-02-06 百万级数据实测)

  • 同步数据量: 278 万条 (2.78 Million Records)。
  • 同步速率: 稳定在 11,500 ~ 12,000 条/秒
  • 吞吐量: 稳定在 6.5 ~ 6.8 MB/s
  • 内存表现:
    • Eden Space: 占用约 650MB (50%),内存分配非常充裕。
    • GC 效率: G1 回收器表现极佳72次 Young GC 总耗时仅 0.597秒(平均每次仅 8ms),对同步性能零干扰。
  • 稳定性: 全程 0 错误,WaitWriterTime 极低 (0.7s),写入端完全无压力。

2. 核心技术优化揭秘

  • 消除 SSL 握手开销:
    • 在 JDBC 连接中强制指定 useSSL=false
    • 效果: 既消除了日志中的安全警告,也减少了每次连接建立时的加密握手时间,在高频同步场景下提升显著。
  • Reader 侧吞吐量暴增:
    • 高并发: 将 channel 提升至 8,并行抽取能力翻倍。
    • 大缓存: 将 fetchSize 提升至 10,000。这是解决 WaitReaderTime 的核心,极大减少了 DataX 与源数据库之间的交互次数。
  • CSV Load 模式 (全量核心):
    • 通过 Python 脚本自动将 DataX 转换为 txtfilewriter 生成 CSV。
    • 利用 MySQL 官方最快的 LOAD DATA LOCAL INFILE 导入,比传统 JDBC INSERT30倍 以上。
  • JDBC Batch 优化 (增量/JDBC 模式):
    • 启用了 rewriteBatchedStatements=true,将多条 REPLACE 语句合并为单条执行,大幅降低网络往返。

3. 最终优化参数清单

  • Reader: channel=8, fetchSize=10000, useSSL=false
  • Writer: batchSize=2048, rewriteBatchedStatements=true, LOAD DATA (全量)。
  • JVM: -server -Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxMetaspaceSize=256m