datax opentsdbreader 使用

  • 2022-07-14
  • 浏览 (1272)

OpenTSDBReader 插件文档

1 快速介绍

OpenTSDBReader 插件实现了从 OpenTSDB 读取数据。OpenTSDB 是主要由 Yahoo 维护的、可扩展的、分布式时序数据库,与阿里巴巴自研 TSDB 的关系与区别详见阿里云官网:《相比 OpenTSDB 优势

2 实现原理

在底层实现上,OpenTSDBReader 通过 HTTP 请求链接到 OpenTSDB 实例,利用 /api/config 接口获取到其底层存储 HBase 的连接信息,再利用 AsyncHBase 框架连接 HBase,通过 Scan 的方式将数据点扫描出来。整个同步的过程通过 metric 和时间段进行切分,即某个 metric 在某一个小时内的数据迁移,组合成一个迁移 Task。

3 功能说明

3.1 配置样例

  • 配置一个从 OpenTSDB 数据库同步抽取数据到本地的作业:
{
  "job": {
    "content": [
      {
        "reader": {
          "name": "opentsdbreader",
          "parameter": {
            "endpoint": "http://localhost:4242",
            "column": [
              "m"
            ],
            "beginDateTime": "2019-01-01 00:00:00",
            "endDateTime": "2019-01-01 03:00:00"
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
            "encoding": "UTF-8",
            "print": true
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 1
      }
    }
  }
}

3.2 参数说明

  • name

    • 描述:本插件的名称
    • 必选:是
    • 默认值:opentsdbreader
  • parameter

    • endpoint
    • 描述:OpenTSDB 的 HTTP 连接地址
    • 必选:是
    • 格式:http://IP:Port
  • 默认值:无

    • column
    • 描述:数据迁移任务需要迁移的 Metric 列表
    • 必选:是
    • 默认值:无
  • beginDateTime

    • 描述:和 endDateTime 配合使用,用于指定哪个时间段内的数据点,需要被迁移
    • 必选:是
    • 格式:yyyy-MM-dd HH:mm:ss
    • 默认值:无
    • 注意:指定起止时间会自动忽略分钟和秒,转为整点时刻,例如 2019-4-18 的 [3:35, 4:55) 会被转为 [3:00, 4:00)
  • endDateTime

    • 描述:和 beginDateTime 配合使用,用于指定哪个时间段内的数据点,需要被迁移
    • 必选:是
    • 格式:yyyy-MM-dd HH:mm:ss
    • 默认值:无
    • 注意:指定起止时间会自动忽略分钟和秒,转为整点时刻,例如 2019-4-18 的 [3:35, 4:55) 会被转为 [3:00, 4:00)

3.3 类型转换

DataX 内部类型 TSDB 数据类型
String TSDB 数据点序列化字符串,包括 timestamp、metric、tags 和 value

4 性能报告

4.1 环境准备

4.1.1 数据特征

从 Metric、时间线、Value 和 采集周期 四个方面来描述:

metric

固定指定一个 metric 为 m

tagkv

前四个 tagkv 全排列,形成 10 * 20 * 100 * 100 = 2000000 条时间线,最后 IP 对应 2000000 条时间线从 1 开始自增。

tag_k tag_v
zone z1~z10
cluster c1~c20
group g1~100
app a1~a100
ip ip1~ip2000000
value

度量值为 [1, 100] 区间内的随机值

interval

采集周期为 10 秒,持续摄入 3 小时,总数据量为 3 * 60 * 60 / 10 * 2000000 = 2,160,000,000 个数据点。

4.1.2 机器参数

OpenTSDB Reader 机型: 64C256G

HBase 机型: 8C16G * 5

4.1.3 DataX jvm 参数

”-Xms4096m -Xmx4096m”

4.2 测试报告

通道数 DataX 速度 (Rec/s) DataX 流量 (MB/s)
1 215428 25.65
2 424994 50.60
3 603132 71.81

5 约束限制

5.1 需要确保与 OpenTSDB 底层存储的网络是连通的

具体缘由详见 6.1

5.2 如果存在某一个 Metric 下在一个小时范围内的数据量过大,可能需要通过 -j 参数调整 JVM 内存大小

考虑到下游 Writer 如果写入速度不及 OpenTSDB reader 的查询数据,可能会存在积压的情况,因此需要适当地调整 JVM 参数。以”从 OpenTSDB 数据库同步抽取数据到本地的作业”为例,启动命令如下:

 python datax/bin/datax.py opentsdb2stream.json -j "-Xms4096m -Xmx4096m"

5.3 指定起止时间会自动被转为整点时刻

指定起止时间会自动被转为整点时刻,例如 2019-4-18 的 [3:35, 3:55) 会被转为 [3:00, 4:00)

5.4 目前只支持兼容 OpenTSDB 2.3.x

其他版本暂不保证兼容

6 FAQ


Q:为什么需要连接 OpenTSDB 的底层存储,为什么不直接使用 /api/query 查询获取数据点?

A:因为通过 OpenTSDB 的 HTTP 接口(/api/query)来读取数据的话,经内部压测发现,在大数据量的情况下,会导致 OpenTSDB 的异步框架会报 CallBack 过多的问题;所以,采用了直连底层 HBase 存储,通过 Scan 的方式来扫描数据点,来避免这个问题。另外,还考虑到,可以通过指定 metric 和时间范围,可以顺序地 Scan HBase 表,提高查询效率。

相关文章

datax README 使用

datax adbpgwriter 使用

datax adswriter 使用

datax cassandrareader 使用

datax cassandrawriter 使用

datax dataxPluginDev 使用

datax drdsreader 使用

datax drdswriter 使用

datax elasticsearchwriter 使用

datax ftpreader 使用

0  赞