TDengine 第三方工具 — Telegraf、Kafka Connect、Flink、Spark

分类 :14.生态 | 篇章 :04 第三方工具

免费详情

TDengine 通过 InfluxDB 兼容协议、JDBC、连接器等方式与主流数据生态对接。本文汇总 Telegraf、Kafka Connect、Flink、Spark、Logstash 等工具的集成方式。

集成方式速查

工具 集成方式 用途
Telegraf InfluxDB output 系统/IoT 采集
collectd collectd protocol 服务器监控
StatsD StatsD protocol 应用指标
Prometheus remote_write 长期存储
Kafka Connect JDBC Sink Kafka → TD
Apache Flink JDBC Sink 流处理结果存储
Apache Spark JDBC 大数据分析
Logstash JDBC output 日志数据
DBeaver JDBC SQL IDE
Hive JDBC 数据仓库

详细解析

1. Telegraf 集成

toml 复制代码
# /etc/telegraf/telegraf.conf

# 输入插件(按需)
[[inputs.cpu]]
  percpu = true
  totalcpu = true

[[inputs.mem]]

[[inputs.system]]


# 输出到 TDengine(通过 InfluxDB Line 协议)
[[outputs.http]]
  url = "http://taosadapter:6041/influxdb/v1/write?db=telegraf"
  method = "POST"
  username = "root"
  password = "taosdata"
  data_format = "influx"


# 启动
systemctl start telegraf

2. collectd 集成

conf 复制代码
# /etc/collectd/collectd.conf

LoadPlugin network

<Plugin "network">
  Server "taosadapter" "6045"
</Plugin>

LoadPlugin "cpu"
LoadPlugin "memory"
LoadPlugin "disk"
LoadPlugin "interface"


# taosAdapter 配置开启 collectd
# /etc/taos/taosadapter.toml
[collectd]
enable = true
port = 6045
db = "collectd"
user = "root"
password = "taosdata"

3. StatsD 集成

bash 复制代码
# StatsD 协议(UDP)
echo "myapp.requests:1|c|@1.0" | nc -u -w0 taosadapter 6044


# taosAdapter 配置
# /etc/taos/taosadapter.toml
[statsd]
enable = true
port = 6044
db = "statsd"

4. Prometheus remote_write

yaml 复制代码
# prometheus.yml
remote_write:
  - url: "http://taosadapter:6041/prometheus/v1/remote_write/prometheus_data"
    basic_auth:
      username: root
      password: taosdata


# 长期存储所有 Prometheus 指标
# 利用 TDengine 高压缩比


# 反向:从 TDengine 读 Prometheus 指标
remote_read:
  - url: "http://taosadapter:6041/prometheus/v1/remote_read/prometheus_data"

5. Kafka Connect JDBC Sink

json 复制代码
// kafka-connect-jdbc-sink.json
{
  "name": "tdengine-sink",
  "config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
    "tasks.max": "4",
    "topics": "sensor_data",
    "connection.url": "jdbc:TAOS-RS://taosadapter:6041/iot",
    "connection.user": "root",
    "connection.password": "taosdata",
    "insert.mode": "insert",
    "auto.create": "true",
    "auto.evolve": "true",
    "pk.mode": "record_value",
    "pk.fields": "ts"
  }
}


# 部署到 Kafka Connect
curl -X POST http://kafka-connect:8083/connectors \
  -H "Content-Type: application/json" \
  -d @kafka-connect-jdbc-sink.json
java 复制代码
// 用 JDBC Sink 写 TDengine
import org.apache.flink.connector.jdbc.*;

DataStream<MeterReading> stream = ...; // 你的数据流

stream.addSink(JdbcSink.sink(
  "INSERT INTO meters VALUES (?, ?, ?)",
  (ps, reading) -> {
    ps.setTimestamp(1, reading.ts);
    ps.setFloat(2, reading.current);
    ps.setInt(3, reading.voltage);
  },
  JdbcExecutionOptions.builder()
    .withBatchSize(1000)
    .withBatchIntervalMs(200)
    .build(),
  new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()
    .withUrl("jdbc:TAOS-WS://taosadapter:6041/iot")
    .withDriverName("com.taosdata.jdbc.ws.WebSocketDriver")
    .withUsername("root")
    .withPassword("taosdata")
    .build()
));

7. Apache Spark 集成

scala 复制代码
// 读 TDengine
val df = spark.read
  .format("jdbc")
  .option("url", "jdbc:TAOS-WS://taosadapter:6041/iot")
  .option("driver", "com.taosdata.jdbc.ws.WebSocketDriver")
  .option("user", "root")
  .option("password", "taosdata")
  .option("dbtable", "(SELECT * FROM meters WHERE ts > NOW - 1d) tmp")
  .load()

df.show()


// 写 TDengine
processedDf.write
  .format("jdbc")
  .mode("append")
  .option("url", "jdbc:TAOS-WS://taosadapter:6041/iot")
  .option("driver", "com.taosdata.jdbc.ws.WebSocketDriver")
  .option("dbtable", "processed_meters")
  .save()

8. Logstash 集成

ruby 复制代码
# logstash.conf
input {
  file {
    path => "/var/log/sensors/*.log"
    codec => json
  }
}

filter {
  date {
    match => ["ts", "ISO8601"]
  }
}

output {
  http {
    url => "http://taosadapter:6041/influxdb/v1/write?db=logstash"
    http_method => "post"
    user => "root"
    password => "taosdata"
    format => "message"
    message => "sensors,device=%{device} value=%{value} %{ts}"
  }
}

DBeaver SQL IDE

复制代码
连接配置:

Driver:
  下载 taos-jdbcdriver-3.x.x.jar
  
连接:
  URL: jdbc:TAOS-WS://localhost:6041/test
  User: root
  Password: taosdata


功能:
  - 表浏览
  - SQL 编辑
  - 数据导出
  - 可视化查询

Hive 集成

sql 复制代码
-- 用 Hive 查 TDengine(通过 JDBC StorageHandler)
CREATE EXTERNAL TABLE hive_meters (
  ts TIMESTAMP,
  current FLOAT,
  voltage INT,
  location STRING
)
STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
  "hive.sql.database.type" = "MYSQL",  -- 借用 MySQL Driver
  "hive.sql.jdbc.driver" = "com.taosdata.jdbc.TSDBDriver",
  "hive.sql.jdbc.url" = "jdbc:TAOS://taosd:6030/iot",
  "hive.sql.dbcp.username" = "root",
  "hive.sql.dbcp.password" = "taosdata",
  "hive.sql.table" = "meters"
);

SELECT * FROM hive_meters LIMIT 10;

代码示例

Telegraf 监控 + Grafana 完整链路

yaml 复制代码
# docker-compose.yml
services:
  taosd:
    image: tdengine/tdengine:3.x.x
  
  adapter:
    image: tdengine/tdengine:3.x.x
    command: taosadapter
    ports: ["6041:6041", "6045:6045"]
  
  telegraf:
    image: telegraf:latest
    volumes:
      - ./telegraf.conf:/etc/telegraf/telegraf.conf
    depends_on:
      - adapter
  
  grafana:
    image: grafana/grafana:latest
    ports: ["3000:3000"]
    environment:
      - GF_INSTALL_PLUGINS=tdengine-datasource

一站式系统监控部署

bash 复制代码
#!/bin/bash
# install_monitoring.sh

# 1. Telegraf 安装
apt install -y telegraf

# 2. 配置 Telegraf → TDengine
cat > /etc/telegraf/telegraf.conf <<EOF
[[inputs.cpu]]
[[inputs.mem]]
[[inputs.disk]]
[[inputs.net]]

[[outputs.http]]
  url = "http://taosadapter:6041/influxdb/v1/write?db=monitoring"
  username = "root"
  password = "taosdata"
  data_format = "influx"
EOF

# 3. 启动
systemctl start telegraf

# 4. 验证数据
sleep 30
taos -s "USE monitoring; SHOW TABLES;"

性能考量

集成性能对比

集成 单实例吞吐
Telegraf 几万指标/秒
collectd 几万指标/秒
Prometheus remote_write 几十万样本/秒
Kafka Connect 几十万行/秒
Flink JDBC Sink 几十万行/秒
Spark JDBC 视分区

选型建议

场景 推荐
系统监控 Telegraf
应用指标 StatsD / Prometheus
Kafka 消息 Kafka Connect / taosX
流处理 Flink
批分析 Spark
日志 Logstash + Schemaless

FAQ

Q1: 用 InfluxDB 兼容协议有何限制?

  • 通用写入功能完整
  • 不支持 InfluxQL(用 TDengine SQL)
  • 部分 Flux 函数无对应

Q2: Kafka Connect 推荐 taosX 还是 JDBC Sink?

  • 简单场景:JDBC Sink 即可
  • 复杂转换/高吞吐:taosX

通过 JDBC Sink 写 TDengine。或用 Flink CDC 源 + 自定义 Sink。

Q4: Spark Streaming 写 TDengine?

可用 foreachBatch 调用 JDBC:

scala 复制代码
stream.foreachBatch { (df, _) =>
  df.write.format("jdbc")...
}

Q5: 国产生态怎么对接?

  • DolphinScheduler:JDBC
  • Apache SeaTunnel:连接器支持
  • DataX:插件
  • 海豚调度等:JDBC 标准接口

参考

系统构架篇

数据模型

存储引擎

查询引擎

数据写入

数据订阅

预聚合

索引

SQL 语句

客户端与连接器

运维

安全

生态

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
guwentian10 小时前
Git Worktree 实战:用并行多 Agent 把开发提速 N 倍
大数据·git·elasticsearch·wroktree
小白勇闯网安圈11 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨12 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图12 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl13 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
LCG元13 小时前
STM32+ESP8266+MQTT 物联网气象站:从零搭建温湿度远程监测系统(附完整源码)
stm32·物联网·struts
ltl13 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl13 小时前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
2503_9317124814 小时前
OpenInsight领衔:企业AI数据分析平台(Data Agent/智能问数/智能数据报告)
大数据