更新时间:2020-09-07 16:20
本文主要介绍如何使用阿里巴巴的开源工具Datax 实现从 MySQL 到 TSDB 的数据迁移。
DataX相关使用介绍请参阅 DataX 的 README 文档。
下面将首先介绍 DataX 工具本身,以及本次迁移工作涉及到的两个插件(MySQL Reader 和 TSDB Writer)。
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具 / 平台,实现包括 MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
MySQL Reader 是 DataX 的一个插件,实现了从 MySQL 读取数据。
TSDB Writer 是 DataX 的一个插件,实现了将数据点写入到阿里巴巴自研 TSDB 数据库中。
点击 链接 进行下载。
这里,我们先以最简单的 Stream Reader 到 Stream Writer 为例。因为这两个插件不依赖任何的外部环境,特别适合用来测试流程是否能走通。简单介绍下这两个插件,其中 Stream Reader 会随机地产生字符串,而 Stream Writer 则会将接受到的字符串输出到控制台,以此模拟一个最简单的数据迁移过程。
将下载后的安装包,解压至某个目录(作为 DATAX_HOME),即可运行迁移任务:
$ cd ${DATAX_HOME}
$ python bin/datax.py job/job.json
下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:
任务启动时刻 : 2019-04-26 11:18:07
任务结束时刻 : 2019-04-26 11:18:17
任务总计耗时 : 10s
任务平均流量 : 253.91KB/s
记录写入速度 : 10000rec/s
读出记录总数 : 100000
读写失败总数 : 0
录制的命令行:数据迁移 Quick Start
通过上述 Stream Reader 到 Stream Writer 的迁移任务,我们就可以确保整个 DataX 流程是没有问题的。下面就可以真正开始 MySQL Reader 到 TSDB Writer 迁移任务了。
配置一个从 MySQL 数据库同步抽取数据到 TSDB 的任务,命名为 mysql2tsdb.json
,完整的配置信息如下(针对各个配置参数的详细说明,请看下一章节”参数说明”):
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/datax"
],
"table": [
"book"
]
}
],
"password": "yuzhouwan",
"splitPk": "id",
"username": "root"
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price"
],
"columnType": [
"tag",
"tag",
"timestamp",
"metric_num"
],
"sourceDbType": "RDB",
"tsdbAddress": "localhost",
"tsdbPort": 8242
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
$ cd ${DATAX_HOME}/..
$ ls
datax/ datax.tar.gz mysql2tsdb.json
$ python datax/bin/datax.py mysql2tsdb.json
下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:
任务启动时刻 : 2019-05-21 18:25:16
任务结束时刻 : 2019-05-21 18:25:27
任务总计耗时 : 11s
任务平均流量 : 3B/s
记录写入速度 : 0rec/s
读出记录总数 : 3
读写失败总数 : 0
录制的命令行:从 MySQL 到 TSDB 数据迁移
接下来,我们来看下各个配置项的含义:
名称 | 类型 | 是否必需 | 描述 | 默认值 | 举例 |
---|---|---|---|---|---|
jdbcUrl | String | 是 | 数据库的 JDBC 连接信息 | 无 | jdbc:mysql://127.0.0.1:3306/datax |
username | String | 是 | 数据源的用户名 | 无 | root |
password | String | 是 | 数据源指定用户名的密码 | 无 | root |
table | String | 是 | 需要同步的表 | 无 | book |
column | Array | 是 | 表中需要同步的列名集合 | [] |
["m"] |
splitPk | String | 否 | 如果指定 splitPk,表示用户希望使用 splitPk 代表的字段进行数据分片 | 空 | id |
名称 | 类型 | 是否必需 | 描述 | 默认值 | 举例 |
---|---|---|---|---|---|
sourceDbType | String | 否 | 目前支持 TSDB 和 RDB 两个取值。其中,TSDB 指 OpenTSDB、InfluxDB、Prometheus、TimeScale 等;而 RDB 指 MySQL、Oracle、PostgreSQL、DRDS 等 | TSDB |
RDB |
column | Array | 是 | 表中需要同步的列名集合 | [] |
["name","type","create_time","price"] |
columnType | Array | 是 | 关系型数据库中表字段,映射到 TSDB 中的类型。 支持的类型: timestamp:该字段是个时间戳; tag:该字段是个 tag; metric_num:该 metric 的 value 是数值类型; metric_string:该 metric 的 value 是字符串类型 |
[] |
["tag","tag","timestamp","metric_num"] |
tsdbAddress | String | 是 | TSDB 的 IP 地址 | 无 | 127.0.0.1 |
tsdbPort | int | 是 | TSDB 的端口 | 无 | 8242 |
batchSize | int | 否 | 每次批量数据的条数(需要保证大于 0) | 100 | 100 |
因为 TSDB Writer 写入数据的方式是调用 HTTP 接口(/api/put
)来完成的,所以需要确保迁移任务的进程能正常访问到 TSDB 暴露出来的 HTTP 接口的。否则,会报错 Connect Exception 异常。
因为 MySQL Reader 读取数据是通过 JDBC 来完成的,所以需要确保迁移任务的进程能正常访问到 MySQL 暴露出来的 JDBC 接口的。否则,会报错 Connect Exception 异常。
需要保证 TSDB Writer 插件中的 column 字段顺序和 MySQL reader 插件中配置的 column 字段顺序保持一致。否则,数据会错乱。
Q:是否支持调整迁移进程的 JVM 内存大小?
A:支持的。以”从 MySQL 到 TSDB 的数据迁移任务”为例,启动命令如下:
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
Q:如何给 TSDB 设置网络白名单?
A:参考《时序数据库 TSDB 版 > 快速入门 > 设置网络白名单》。
Q:将迁移任务运行在 ECS 上的用户,如何配置 VPC,以及常见问题有哪些?
A:参考《ECS 安全组配置案例》和《VPC 常见问题》。
在文档使用中是否遇到以下问题
更多建议
匿名提交