1 概述
ThingsBoard是用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准的物联网协议MQTT、CoAP和HTTP实现设备连接,并支持云和本地部署。
ThingsBoard迄今没有导入专业的时序数据库应用,用户可选择的只有PostgreSQL和Cassandra。虽然针对PostgreSQL引入了TimeScale插件,但由于其不是按照宽表的方式组织数据记录,TimeScale的优势根本发挥不出来。总之,这两种数据库不具备高效的数据吞吐能力。
而且,Thingsboard在数据入库时,是将设备的多个遥测值拆分成不同的记录。不断增加了数据冗余量,而且非常不便于使用。
TDengine是涛思数据专为物联网设计和优化的时序数据库。其具有高性能、高可靠、可伸缩、零管理、简单易学等技术特点,提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度。
TDEngine的主要功能特点包括:
- 类SQL查询语言来插入或查询数据
- 支持C/C++, Java(JDBC), Python, Go, RESTful, and Node.JS 等开发接口
- 通过TDengine Shell或Python/R/Matlab可做各种Ad Hoc查询分析
- 通过连续查询,支持基于滑动窗口的流式计算
- 引入超级表,让设备之间的数据聚合通过标签变得简单、灵活
- 内嵌消息队列,应用可订阅最新的数据
- 内嵌缓存机制,每台设备的最新状态或记录都可快速获得
- 无历史数据与实时数据之分
- 安装包仅2.7M
我们通过改造ThingsBaord的JDBC驱动包和新增“保存遥测数据(TDengine)”规则节点,成功用TDEngine替换Cassandra。同时,数据记录以测控点为单位进行组织,有效克服了ThingsBoard时序数据高并发瓶颈问题。
本文主要介绍如何将TDengine集成到ThingsBoard,并进行压力测试。
2 安装部署
2.1 安装TDengine
TDengine软件分为服务器、客户端模块两部分,目前2.0版服务器仅能在Linux系统上安装和运行。客户端可以在Windows或Linux上安装和运行。最新版为:2.0.20.12,这里我们选择2.0.14.0版本。
- 安装客户端
在Windows环境安装户端,使用安装包快速安装。下载链接:
https://www.taosdata.com/cn/all-downloads/#TDengine-Windows-Clienttaos.dll 在 Windows 系统中安装完客户端之后,驱动包依赖的 taos.dll 文件会自动拷贝到系统默认搜索路径 C:/Windows/System32 下,不需要单独指定。
- 安装服务器
在Linux环境安装服务器,使用docker安装
docker run -d -v /home/taos/etc:/etc/taos -v /home/taos/lib:/var/lib/taos -v /home/taos/log:/var/log/taos -p 6030:6030 -p 6035:6035 -p 6041:6041 -p 6030-6040:6030-6040/udp tdengine/tdengine:2.0.14.0
进入容器
docker exec -it 4866b36a465c /bin/bash
输入taos命令,如下图所示,说明安装成功
- 注意事项
如果系统提示找不到FQDN,请参考:
https://www.cnblogs.com/taosdata/p/13690374.html
注意服务器版本与客户端版本必须一致,详细安装流程,请参考:
https://www.taosdata.com/cn/getting-started/
2.2 Thingsboard集成TDengine
新增“保存遥测数据(TDengine)”规则节点
- 添加依赖
TDengine 为了方便 Java 应用使用,提供了遵循 JDBC 标准(3.0)API 规范的 taos-jdbcdriver 实现。在项目里面引入taos-jdbcdriver依赖,maven 项目中使用如下:
如果使用其它版本,Sonatype Repository 地址:
https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver
- 修改yml文件
新增数据库连接配置
修改时序数据存储配置
- 编码
taos-jdbcdriver 的实现包括 2 种形式: JDBC-JNI 和 JDBC-RESTful。以JNI为例
- UI 配置
ThingsBoard规则节点UI在官方github仓库一个项目。请参考:
https://github.com/thingsboard/thingsboard-rule-config-ui-ngx
- 编译
mvn clean install -DskipTests
3 测试
使用脚本向 thingsboard 默认的 mqtt topic (v1/devices/me/telemetry) 推送消息,使用jconsole 查看 Thingsboard 运行环境性能分析信息。
3.1 测试环境
编号 | 服务 | 版本 | 环境 |
1 | Thingsboard | 3.2.0 | 192.168.1.254 (8 核 CPU,16G 内存) |
2 | Postgres | 13.0 | 192.168.1.88 (4 核 CPU,8G 内存) |
3 | TDengine | 2.0.14 | 192.168.1.203 (4 核 CPU,8G 内存) |
3.2 测试
创建一个测控点类型,选择数据类型,填写 key 映射关系
在“测控点管理”中创建一个测控点类型为“gateway”的测控点
复制令牌,粘贴到脚本中
使用脚本推送数据,创建5000个测控点,向每个测控点每秒推送一条数据,每条数据包含6个key
测控点创建成功
3.3 测试结果
- 查看测控点历史数据
使用脚本推送数据频率为1条/秒,实际入库频率也为1条/秒
- 堆内存使用量
通过jconsole查看堆内存使用情况,内存未溢出
以上为Thingsboard集成TDengine说明文档,希望对大家有所帮助。