dtle (Data-Transformation-le) 是上海爱可生信息技术股份有限公司 开发并开源的 CDC 工具.

特点

  • 多种数据传输模式
    • 支持链路压缩
    • 支持同构传输和异构传输
    • 支持跨网络边际的传输
  • 多种数据处理模式
    • 支持库/表/行级别 数据过滤
  • 多种数据通道模式
    • 支持多对多的数据传输
    • 支持回环传输
  • 多种源/目标端
    • 支持MySQL - ActionDB的数据传输
    • 支持MySQL - MySQL的数据传输
    • 支持MySQL - Kafka的数据传输
    • 支持Oracle - MySQL的数据传输
  • 集群模式
    • 提供可靠的元数据存储
    • 可进行自动任务分配
    • 支持自动故障转移

适用场景

  • 兼容MySQL的单向复制/聚合/分散
  • 跨数据中心的双向复制
  • 公有云间的数据同步
  • MySQL到Kafka的数据变更通知
  • Oracle到MySQL的数据同步

使用

在容器中使用

1
2
docker pull consul:latest
docker pull actiontech/dtle:latest

MySQL 的单向复制

创建网络

1
docker network create dtle-net

创建源端/目标端 MySQL

1
2
3
docker run --name mysql-src -e MYSQL_ROOT_PASSWORD=pass -p 33061:3306 --network=dtle-net -d mysql:5.7 --gtid-mode=ON --enforce-gtid-consistency=1 --log-bin=bin --server-id=1

docker run --name mysql-dst -e MYSQL_ROOT_PASSWORD=pass -p 33062:3306 --network=dtle-net -d mysql:5.7 --gtid-mode=ON --enforce-gtid-consistency=1 --log-bin=bin --server-id=2

创建 dtle

1
2
3
docker run --name dtle-consul -p 8500:8500 --network=dtle-net -d consul:latest
docker run --name dtle -p 4646:4646 --network=dtle-net -d actiontech/dtle
# 如需要使用dtle 2.x HTTP API兼容层,则需要额外映射8190端口:-p 8190:8190

创建复制任务

复制任务job.json文件, 任务同步复制demo.demo_tbl表数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
  "Job": {
    "ID": "dtle-demo",
    "Datacenters": ["dc1"],
    "TaskGroups": [{
        "Name": "src",
        "Tasks": [{
          "Name": "src",
          "Driver": "dtle",
          "Config": {
            "Gtid": "",
            "ReplicateDoDb": [{
              "TableSchema": "demo",
              "Tables": [{
                "TableName": "demo_tbl"
              }]
            }],
            "SrcConnectionConfig": {
              "Host": "mysql-src",
              "Port": 3306,
              "User": "root",
              "Password": "pass"
            },
            "DestConnectionConfig": {
              "Host": "mysql-dst",
              "Port": 3306,
              "User": "root",
              "Password": "pass"
            }
          }
        }]
      }, {
        "Name": "dest",
        "Tasks": [{
          "Name": "dest",
          "Driver": "dtle",
          "Config": {
            "DestType": "mysql"
          }
        }]
    }]
  }
}

创建复制任务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> curl -XPOST "http://127.0.0.1:4646/v1/jobs" -d @job.json -s | jq
< {
  "EvalCreateIndex": 50,
  "EvalID": "a5e9c353-5eb9-243e-983d-bc096a93ddca",
  "Index": 50,
  "JobModifyIndex": 49,
  "KnownLeader": false,
  "LastContact": 0,
  "Warnings": ""
}

参考