TSDB Writer插件实现了将数据点写入到阿里巴巴云原生多模数据库Lindorm TSDB数据库中,本文为您介绍TSDB Writer支持的数据类型、字段映射和数据源等参数及配置示例。

注意 TSDB Writer仅支持使用独享数据集成资源组,不支持使用公共数据集成(调试)资源组和自定义数据集成资源组

背景信息

时间序列数据库TSDB(Time Series Database)是一种高性能、低成本、稳定可靠的在线时序数据库服务。提供高效读写、高压缩比存储、时序数据插值及聚合计算,广泛应用于物联网(IoT)设备监控系统 、企业能源管理系统(EMS)、生产安全监控系统和电力检测系统等行业场景。

TSDB 提供千万级时序数据秒级写入,高压缩比低成本存储、预降采样、插值、多维聚合计算,查询结果可视化功能;解决由于设备采集点数量巨大,数据采集频率高,造成的存储成本高,写入和查询分析效率低的问题。

更多关于 TSDB 的介绍,详情请参见时序引擎简介

说明 HiTSDB已更名为云原生多模数据库Lindorm TSDB。Lindorm TSDB兼容大部分HiTSDB的HTTP API并提供原生SQL能力,TSDBWriter插件使用HTTP API方式写入,要使用原生SQL能力需要提前在Lindorm TSDB进行建表。

详情请参见与旧版TSDB的比较

实现原理

TSDB Writer插件通过TSDB客户端 hitsdb-client 连接TSDB实例,并将数据点通过HTTP API方式写入。关于写入接口,详情请参见TSDB的SDK文档:SDK参考

使用限制

  • TSDB Writer目前仅支持Lindorm TSDB全部版本以及HiTSDB 2.4.x 及以上版本,其他版本暂不保证兼容。
  • TSDB Writer仅支持使用独享数据集成资源组,不支持使用公共数据集成(调试)资源组和自定义数据集成资源组
  • TSDB Writer仅支持脚本模式配置任务。

支持的数据类型

当sourceDbType为TSDB,即源端数据源为TSDB Reader或者OpenTSDB Reader时,插件会将源端数据按照JSON字符串格式直接写入;当sourceDbType为RDB,即源端数据源为关系型数据库,插件会按照关系型数据库的Record进行解析,以下内容为您介绍,当sourceDbType为RDB时,columnType的配置及与其对应位置的column可写入的数据类型。

关于TSDB数据模型相关介绍,详情请参见数据模型

数据模型 columnType配置类型 数据类型
数据标签 tag 字符串类型。Tag描述数据源的特征,通常不随时间变化
数据产生时间 timestamp 时间戳类型。Timestamp代表数据产生的时间点,可以写入时指定,也可由系统自动生成
数据内容 field_string 该Field的value是字符串类型。Field描述数据源的量测指标,通常随着时间不断变化,
field_double 该Field的value是数值类型。Field描述数据源的量测指标,通常随着时间不断变化,
field_boolean 该Field的value是布尔类型。Field描述数据源的量测指标,通常随着时间不断变化,

参数说明

数据源 参数 描述 是否必选 默认值
公共参数 sourceDbType 数据源的类型。 TSDB
说明 目前支持TSDB和RDB两个取值。其中,TSDB包括OpenTSDB、Prometheus和TimeScale 。RDB包括MySQL、Oracle、PostgreSQL、DRDS等。
endpoint TSDB 的 HTTP 连接访问地址,请登录产品管理控制台获取。 是,格式为http://IP:Port。
database 导入的TSDB数据库名。 default
说明 TSDB需要提前创建数据库。
username TSDB数据库用户名, TSDB配置了鉴权时需要填写。
batchSize 每次批量写入数据的条数。设置过大的batchSize需要更多的任务内存。 否,数据类型为INT,需要确保大于0。 100
数据源为TSDB maxRetryTime 失败后重试的次数。 否,数据类型为INT,需要确保大于1。 3
ignoreWriteError 如果设置为true,则忽略写入错误,继续写入。如果多次重试后仍写入失败,则终止写入任务。 否,数据类型为BOOL。 false
数据源为RDB table 要导入TSDB的表名(metric)。如果multiField为false则不需要填写,对应的metric需要写到column字段 multiField为true时必选。
multiField 使用HTTP API多值(多个field)方式写入TSDB。
说明 如果使用Lindorm TSDB原生SQL能力访问HTTP API方式写入的数据,需要在TSDB进行预建表,否则只能使用HiTSDB HTTP API方式查询数据,详情请参见多值数据查询
必选。 false
说明 目前TSDB版本使用多值写入时,此值需要指定为true。
column 关系型数据库中表的字段名。
说明 此处的字段顺序,需要和Reader插件中配置的column字段的顺序保持一致。
columnType 关系型数据库中表字段,映射到TSDB中的类型。支持的类型如下所示:
  • timestamp:该字段为时间戳。
  • tag:该字段为tag。
  • field_string:该Field的value是字符串类型
  • field_double:该Field的value是数值类型。
  • field_boolean:该Field的value是布尔类型。
说明 此处的字段顺序,需要和Reader插件中配置的column字段的顺序保持一致。
batchSize 每次批量写入数据的条数。 否,数据类型为INT,需要确保大于0。 100

向导开发介绍

暂不支持向导模式开发。

脚本开发介绍

使用脚本模式开发的详情请参见通过脚本模式配置任务

  • RDB到TSDB的默认配置(推荐)
    {
        "type": "job",
        "version": "2.0",
        "steps": [
            {
                "stepType": "stream",//您可将stream插件替换为具体的RDB类型插件json,RDB类型数据库包括MySQL、Oracle、PostgreSQL、DRDS等。
                "parameter": {},
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "tsdb",
                "parameter": {
                    "endpoint": "http://localhost:8242",
                    "username": "xxx",
                    "password": "xxx",
                    "sourceDbType": "RDB",
                    "batchSize": 256,
                    "columnType": [
                        "tag",
                        "tag",
                        "field_string",
                        "field_double",
                        "timestamp",
                        "field_bool"
                    ],
                    "column": [
                        "tag1",
                        "tag2",
                        "field1",
                        "field2",
                        "timestamp",
                        "field3"
                    ],
                    "multiField": "true",
                    "table": "testmetric",
                    "ignoreWriteError": "false",
                    "database": "default"
                },
                "name": "Writer",
                "category": "writer"
            }
        ],
        "setting": {
            "errorLimit": {
                "record": "0"
            },
            "speed": {
                "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
                "concurrent":1, //作业并发数。
                "mbps":"12"//限流
            }
        },
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        }
    }
  • 从支持OpenTSDB 协议的数据库同步抽取数据到TSDB:
    {
        "type": "job",
        "version": "2.0",
        "steps": [
            {
                "stepType": "opentsdb",
                "parameter": {
                    "endpoint": "http://localhost:4242",
                    "column": [
                        "m1",
                        "m2",
                        "m3",
                        "m4",
                        "m5",
                        "m6"
                    ],
                    "startTime": "2019-01-01 00:00:00",
                    "endTime": "2019-01-01 03:00:00"
                },
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "tsdb",
                "parameter": {
                    "endpoint": "http://localhost:8242"
                },
                "name": "Writer",
                "category": "writer"
            }
        ],
        "setting": {
            "errorLimit": {
                "record": "0"
            },
            "speed": {
                "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
                "concurrent":1, //作业并发数。
                "mbps":"12"//限流
            }
        },
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        }
    }
  • 使用 OpenTSDB(单值)协议写入TSDB(不推荐):
    
    {
        "type": "job",
        "version": "2.0",
        "steps": [
            {
                "stepType": "stream",//您可将stream插件替换为具体的RDB类型插件json,RDB类型数据库包括MySQL、Oracle、PostgreSQL、DRDS等。
                "parameter": {},
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "tsdb",
                "parameter": {
                    "endpoint": "http://localhost:8242",
                    "username": "xxx",
                    "password": "xxx",
                    "sourceDbType": "RDB",
                    "batchSize": 256,
                    "columnType": [
                        "tag",
                        "tag",
                        "field_string",
                        "field_double",
                        "timestamp",
                        "field_boolean"
                    ],
                    "column": [
                        "tag1",
                        "tag2",
                        "field_metric_1",
                        "field_metric_2",
                        "timestamp",
                        "field_metric_3"
                    ],
                    "ignoreWriteError": "false"
                },
                "name": "Writer",
                "category": "writer"
            }
        ],
        "setting": {
            "errorLimit": {
                "record": "0"
            },
            "speed": {
                "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
                "concurrent":1, //作业并发数。
                "mbps":"12"//限流
            }
        },
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        }
    }
    说明 转换到的TSDB 表名(metric)由column中field对应的列名决定,对于上诉配置一行关系型数据将会写入三个metric(field_metric_1,field_metric_2,field_metric_3)。

性能报告

  • 性能数据特征
    • Metric:指定一个Metric为m。
    • tagkv:前4个tagkv全排列,形成10*20*100*100=2,000,000条时间线,最后IP对应2,000,000条时间线,从1开始自增。
      tag_k tag_v
      zone z1~z10
      cluster c1~c20
      group g1~100
      app a1~a100
      ip ip1~ip2,000,000
    • value:度量值为[1, 100]区间内的随机值。
    • interval:采集周期为10秒,持续摄入3小时,总数据量为3*60*60/10*2,000,000=2,160,000,000个数据点。
  • 性能测试结果
    通道数 数据集成速度(Rec/s) 数据集成流量(MB/s)
    1 129,753 15.45
    2 284,953 33.70
    3 385,868 45.71