分类 :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
6. Apache Flink 集成
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
Q3: Flink CDC 接 TDengine?
通过 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 标准接口
参考
系统构架篇
- 01-《TDengine 整体架构全景》
- 02-《集群拓扑深度解析》
- 03-《MNode 内部机制深度解析》
- 04-《RPC 通信层深度解析》
- 05-《VNode 生命周期》
- 06-《RAFT 共识协议》
- 07-《端到端的消息流》
数据模型
- 01-《数据库创建与参数详解》
- 02-《超级表/子表/普通表》
- 03-《支持数据类型深度解析》
- 04-《TDengine Tag 设计哲学与 Schema 变更机制》
- 05-《TDengine 虚拟表实现原理》
存储引擎
- 01-《TDengine 存储引擎概览》
- 02-《TDengine MemTable 深度解析》
- 03-《TDengine WAL 预写日志机制》
- 04-《TDengine 数据文件格式》
- 05-《TDengine Commit 与 Flush 机制 》
- 06-《TDengine Compaction 合并策略 》
- 07-《TDengine 数据保留与 TTL》
- 08-《TDengine 压缩编码机制》
- 09-《TDengine Cache 与 Last 查询加速》
- 10-《TDengine 逻辑计划生成》
查询引擎
- 01-《TDengine 查询引擎概览》
- 02-《TDengine SQL 解析与词法分析》
- 03-《TDengine 语义分析与 AST 重写》
- 04-《TDengine 逻辑计划生成》
- 05-《TDengine 物理计划生成》
- 06-《TDengine 扫描算子》
- 07-《TDengine 聚合算子》
- 08-《TDengine 连接算子》
- 09-《TDengine 排序、填充与投影》
- 10-《TDengine 分布式查询执行》
- 11-《TDengine EXPLAIN 与查询优化》
数据写入
- 01-《TDengine SQL INSERT》
- 02-《TDengine 无模式写入》
- 03-《TDengine STMT 写入》
- 04-《TDengine 写入内部流程》
- 05-《TDengine 数据更新删除》
数据订阅
- 01-《TDengine 数据订阅》
- 02-《TDengine 订阅 vs Kafka》
- 03-《TDengine TMQ 消费流程》
- 04-《TDengine 内部机制》
- 05-《TDengine TMQ 最佳实践》
预聚合
索引
SQL 语句
- 01-《TDengine DDL》
- 02-《TDengine DML SELECT》
- 03-《TDengine DML 函数完整参考》
- 04-《TDengine JOIN 完整语法》
- 05-《TDengine 窗口完整语法》
- 06-《TDengine 操作符与表达式》
- 07-《TDengine 系统表》
- 08-《TDengine SQL 与标准 SQL 差异》
客户端与连接器
- 01-《TDengine 的连接方式》
- 02-《TDengine C/C++ 连接器》
- 03-《TDengine java 连接器》
- 04-《TDengine Python 连接器》
- 05-《TDengine Go 与 Rust 连接器》
- 06-《TDengine Node.js 与 C# 连接器》
运维
- 01-《TDengine 部署指南》
- 02-《TDengine 配置详解》
- 03-《TDengine 监控系统》
- 04-《TDengine 备份与恢复》
- 05-《TDengine 版本升级》
- 06-《TDengine 加密使用指南》
安全
生态
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
