Skip to content
longkeyyPublic

About

A high-performance data synchronization framework written in Go, inspired by Alibaba DataX

Resources

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

English | 简体中文

go-datax

Go版本的DataX数据同步工具,100%兼容DataX JSON配置格式。

✨ 核心特性

  • 🚀 高性能: Go语言实现,高并发数据传输
  • 🔧 零依赖: 单二进制文件,无需额外安装
  • 📊 30+数据源: 支持主流数据库和存储系统
  • ✅ 100%兼容: 完全兼容DataX Java版配置文件
  • ⚡ Go优化: 增强的splitPk支持和JSON文件处理

🆕 Go版本增强功能

非数字类型splitPk支持

与Java版本只支持数字类型splitPk不同,Go版本支持:

  • 数字类型: int, bigint, decimal等(与Java版本兼容)
  • 字符串类型: varchar, text等字符串字段分片
  • 日期类型: date, timestamp等时间字段分片
{
  "reader": {
    "parameter": {
      "splitPk": "create_time",  // 支持日期时间字段分片
      "where": "status = 'active'"
    }
  }
}

JSON文件数据源支持

新增专用JSON文件读取和写入插件:

  • JsonFileReader: 读取JSON/JSONL文件
  • JsonFileWriter: 写入JSON格式文件
  • 自动模式识别: 自动检测标准JSON vs JSONL格式
{
  "reader": {
    "name": "jsonfilereader",
    "parameter": {
      "path": ["/data/input.json"],
      "encoding": "UTF-8"
    }
  }
}

🏗️ 架构设计

采用DataX三层架构设计:

Engine Layer (引擎层)
├── JobContainer (作业容器)
└── TaskGroupContainer (任务组容器)
    ├── Reader Task (读取任务)
    ├── Channel (数据通道)
    └── Writer Task (写入任务)

📦 支持的数据源

DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。

类型 数据源 Reader(读) Writer(写) 文档
关系型数据库 MySQL ✅ ✅ 读 、写
PostgreSQL ✅ ✅ 读 、写
Oracle ✅ ✅ 读 、写
SQL Server ✅ ✅ 读 、写
SQLite ✅ ✅ 读 、写
OceanBase ✅ ✅ 读 、写
GaussDB ✅ ✅ 读 、写
Sybase ASE ✅ ✅ 读 、写
大数据存储 ClickHouse ✅ ✅ 读 、写
StarRocks ✅ ✅ 读 、写
Apache Doris ✅ ✅ 读 、写
HDFS ✅ ✅ 读 、写
Databend ❌ ✅ 写
NoSQL数据库 MongoDB ✅ ✅ 读 、写
Cassandra ✅ ✅ 读 、写
Neo4j ❌ ✅ 写
ElasticSearch ❌ ✅ 写
时序数据库 TDengine ✅ ✅ 读 、写
文件存储 TXT文件 ✅ ✅ 读 、写
JSON文件 ✅ ✅ 读 、写
FTP/SFTP ✅ ✅ 读 、写
云存储 OSS ✅ ❌ 读
流数据 Stream ✅ ✅ 读 、写

🚀 快速开始

安装

方式1: 下载预编译二进制

# Linux x86_64
wget https://github.com/longkeyy/go-datax/releases/latest/download/datax-linux-amd64
chmod +x datax-linux-amd64
sudo mv datax-linux-amd64 /usr/local/bin/datax

# macOS Apple Silicon
wget https://github.com/longkeyy/go-datax/releases/latest/download/datax-darwin-arm64
chmod +x datax-darwin-arm64
sudo mv datax-darwin-arm64 /usr/local/bin/datax

方式2: Docker镜像

docker pull ghcr.io/longkeyy/go-datax:latest

方式3: 源码编译

git clone https://github.com/longkeyy/go-datax.git
cd go-datax
make build

基础使用

  1. 创建配置文件 (config.json):
{
  "job": {
    "setting": {
      "speed": {
        "channel": 3
      }
    },
    "content": [{
      "reader": {
        "name": "postgresqlreader",
        "parameter": {
          "username": "postgres",
          "password": "password",
          "connection": [{
            "jdbcUrl": ["jdbc:postgresql://localhost:5432/source_db"],
            "table": ["user_table"]
          }],
          "column": ["id", "name", "email"],
          "splitPk": "id"
        }
      },
      "writer": {
        "name": "mysqlwriter",
        "parameter": {
          "username": "root",
          "password": "password",
          "connection": [{
            "jdbcUrl": "jdbc:mysql://localhost:3306/target_db",
            "table": ["user_table"]
          }],
          "column": ["id", "name", "email"]
        }
      }
    }]
  }
}
  1. 执行数据同步:
# 本地运行
./datax -job config.json

# Docker运行
docker run --rm -v $(pwd)/config.json:/config.json ghcr.io/longkeyy/go-datax:latest -job /config.json

配置参数说明

性能控制

{
  "job": {
    "setting": {
      "speed": {
        "channel": 4,        // 并发通道数
        "record": 10000,     // 记录数限制
        "byte": 1048576      // 字节数限制
      },
      "errorLimit": {
        "record": 100,       // 错误记录上限
        "percentage": 0.05   // 错误率上限
      }
    }
  }
}

数据过滤和分片

{
  "reader": {
    "parameter": {
      "where": "create_time > '2023-01-01'",
      "splitPk": "user_id",          // 支持数字、字符串、日期类型
      "fetchSize": 1024
    }
  }
}

📋 功能对比 (vs DataX Java版)

核心功能

  • ✅ 三层架构: Engine-JobContainer-TaskGroupContainer
  • ✅ 插件系统: Reader/Writer工厂模式注册
  • ✅ 数据模型: Record/Column类型系统
  • ✅ 配置管理: 100% JSON配置兼容
  • ✅ 监控统计: 实时传输监控和性能指标
  • ✅ 错误控制: errorLimit和容错机制

数据同步

  • ✅ 全量同步: 完整表数据同步
  • ✅ 增量同步: 基于WHERE条件的业务增量
  • ✅ 异构同步: 跨数据源类型同步
  • ✅ 分片并发: splitPk分片并行处理
  • ❌ 实时同步: 不支持(与Java版一致)

数据转换

  • ✅ dx_filter: 数据过滤
  • ✅ dx_substr: 字符串截取
  • ✅ dx_replace: 字符串替换
  • ✅ dx_pad: 字符串填充
  • ✅ dx_digest: 数据摘要
  • ❌ dx_groovy: 脚本转换(计划支持)

Go版本增强

  • 🚀 非数字splitPk: 支持字符串、日期类型分片
  • 🚀 JSON文件支持: JsonFileReader/Writer
  • 🚀 纯Go驱动: Oracle/Sybase无需客户端
  • 🚀 单二进制: 零依赖部署

数据源支持

  • ✅ 关系型数据库 (8个): MySQL, PostgreSQL, Oracle, SQL Server, SQLite, OceanBase, GaussDB, Sybase
  • ✅ 大数据存储 (6个): HDFS, ClickHouse, StarRocks, Doris, Databend, TDengine
  • ✅ NoSQL数据库 (4个): MongoDB, Cassandra, Neo4j, ElasticSearch
  • ✅ 文件存储 (3个): TXT文件, JSON文件, FTP/SFTP
  • ✅ 云存储 (1个): OSS
  • ✅ 流数据 (1个): Stream
  • ❌ 计划支持: HBase, MaxCompute, OTS

总计: 21种数据源,42个Reader/Writer插件

📖 文档

用户文档

开发者文档

🤝 贡献

欢迎提交Issue和Pull Request来帮助改进项目。

📄 许可证

本项目采用MIT许可证 - 详见LICENSE文件。

🔗 相关项目

About

A high-performance data synchronization framework written in Go, inspired by Alibaba DataX

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages