littlebot
Published on 2025-04-17 / 1 Visits
0

【源码】基于Go语言的自主数据传输系统(DTS)

项目简介

dts(data transfer service)是自主研发的数据传输系统,能够以增量或全量 + 增量的方式,将某个数据源的数据同步到下游的其它数据源。目前支持 MySQL 到 MySQL 以及 MySQL 到 Kafka 的数据同步,可用于 TP 和 AP 两种场景,后续会支持更多数据源。

项目的主要特性和功能

基础功能

  • 通用功能:支持 SQL 语句指定数据抽取过滤器,支持数字型字段与 UTF - 8 编码字符串字段,支持 gh - ost 在线 DDL、普通在线 DDL,一个任务可涵盖多个 MySQL 库和数据表。
  • OLTP:实现 MySQL 到 MySQL 数据实时增量同步、全量 + 增量同步,支持 MySQL 分片平滑扩容(需配合 dbproxy)以及基于 GTID 的双向数据同步。
  • OLAP:支持 MySQL 到 Kafka 的增量数据同步,可指定 Kafka Topic、分片方式,还能指定写入 Kafka 时需过滤的 Columns。

高级功能

  • 集群高可用:http 服务无状态横向扩容,worker 服务可在线迁移任务。
  • 任务分配负载均衡:根据每个进程的任务数(后续支持服务器资源)分配任务。
  • 数据断点续传:每传输一定量的 binlog events 记录当前 GTID,后续在此基础上继续传输。
  • 服务 graceful shutdown:先停止抽取线程,再停止回放线程,完成任务状态记录后关闭服务。

安装使用步骤

安装依赖

Go 版本需 >= 1.13,使用 go mod 进行依赖管理。

构建项目

在项目根目录下执行 make 命令,构建输出文件为 bin/dts

启动依赖服务

  • 启动 etcd。
  • 启动 MySQL 用于保存 dts 的元数据。

启动 dts 服务

执行命令 bin/dts -config etc/replicator.ini 启动 dts 服务。

配置说明

  • DTS 配置:修改 etc/replicator.ini 文件,可参考示例并修改依赖地址。
  • MySQL 配置(数据源):修改 /etc/my.cnf 文件,配置如下: ```yaml [mysqld] gtid_mode=on enforce_gtid_consistency=on

log_bin=ON binlog_format=row log-slave-updates=1 ```

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】