Apache IoTDB
Apache IoTDB (物联网数据库) (opens new window) 是一款高性能可扩展的物联网时序数据库,用于处理由各种物联网设备和系统产生的海量时序数据。通过数据桥接将数据导入 Apache IoTDB,您可以将来自其他系统的数据转发到 Apache IoTDB 进行存储和分析。
EMQX 支持与 Apache IoTDB 之间的数据集成, 使您能够通过它的 REST API V2 (opens new window) 将时序数据转发到 Apache IoTDB。
提示
Apache IoTDB 数据集成是 EMQX 企业版功能。EMQX 企业版可以为您带来更全面的关键业务场景覆盖、更丰富的数据集成支持,更高的生产级可靠性保证以及 24/7 的全球技术支持,欢迎免费试用 (opens new window)。
前置准备
功能清单
快速开始
本节为如何使用 Apache IoTDB 数据桥接提供了实用的教程,包括如何设置 Apache IoTDB 服务器、创建数据桥接和规则以将数据转发到 Apache IoTDB、以及如何测试数据桥接和规则。
本教程假定 EMQX 和 ApacheIoTDB 均在本地运行。如果您在远程运行 Apache IoTDB 和 EMQX,请根据实际情况调整相应配置。
启动 Apache IoTDB 服务器
本节将介绍如何通过 Docker (opens new window) 启动 Apache IoTDB 服务器。 确保在您的 IoTDB 配置中具备该字段: enable_rest_service=true
。
在 REST 接口开启的情况下运行下面的命令启动 Apache IoTDB 服务器:
docker run -d --name iotdb-service \
--hostname iotdb-service \
-p 6667:6667 \
-p 18080:18080 \
-e enable_rest_service=true \
-e cn_internal_address=iotdb-service \
-e cn_target_config_node_list=iotdb-service:10710 \
-e cn_internal_port=10710 \
-e cn_consensus_port=10720 \
-e dn_rpc_address=iotdb-service \
-e dn_internal_address=iotdb-service \
-e dn_target_config_node_list=iotdb-service:10710 \
-e dn_mpp_data_exchange_port=10740 \
-e dn_schema_region_consensus_port=10750 \
-e dn_data_region_consensus_port=10760 \
-e dn_rpc_port=6667 \
apache/iotdb:1.1.0-standalone
有关如何通过 Docker 运行 IoTDB 的更多信息,请参阅: IoTDB in Docker on Docker Hub (opens new window)。
创建 Apache IoTDB 数据桥接
本节将通过 Dashboard 演示如何创建到 Apache IoTDB 的数据桥接。
在 Dashboard 左侧导航目录中点击数据集成 -> 数据桥接。
点击页面右上角的创建。
在创建数据桥接页面, 点击选择 Apache IoTDB 作为数据桥接类型, 然后点击 下一步。
输入数据桥接名称,要求是大小写英文字母和数字的组合。
输入 Apache IoTDB 服务器链接信息:
基础 URL: 输入
http://localhost:18080
;如果服务器在远程运行,须输入实际 IoTDB 服务器地址和端口。用户名: 输入 IoTDB 用户名; 默认值为
root
。密码: 输入 IoTDB 密码; 默认值为
root
。设备 ID (可选): 输入一个固定的设备名称,表明被插入到 IoTDB 数据库的时序数据来自该设备。
提示
如果留空,设备 ID 也可以在发布的消息中指定,通过规则配置,或从消息发送的主题中提取,将
/
转换为.
。例如,向主题root/sg27
发布一条消息将导致发送一个设备名称为root.sg27
的消息。然而,相比此前提到的其他任何配置方式,在此字段中配置的固定设备名称将被优先使用。
高级功能(可选):根据情况配置同步/异步模式、批量模式。
点击创建前,您可点击测试连接按钮确保能连接到 Apache IoTDB 服务器。
点击创建按钮完成数据桥接创建。
在弹出的创建成功对话框中您可以点击创建规则,继续创建规则以指定需要写入 Apache IoTDB 的数据。详细步骤可参照创建数据转发规则章节的步骤来创建规则。
至此,您已经完成数据桥接的创建,在 Dashboard 的数据桥接页面,可以看到 Apache IoTDB 数据桥接的状态为已连接。
创建数据转发规则
本节将介绍如何创建一条规则来指定需要转发至 Apache IoTDB 的数据。
转到 Dashboard 数据集成 -> 规则页面。
点击页面右上角的创建。
输入规则 ID,例如
my_rule
.在 SQL 编辑器中输入规则,例如我们希望将
root/#
主题的 MQTT 消息转发至 Apache IoTDB,可通过如下规则 SQL 实现:SELECT
*
FROM
"root/#"
如果您想要创建自定义的规则,您需要在 SQL 语句的
SELECT
部分选择出桥接所需的所有字段。例如,客户端发送一条 payload 格式为 JSON 的消息,在 IoTDB 桥接中需要以下字段:{
"measurement": "temp",
"data_type": "FLOAT",
"value": "32.67",
"device_id": "root.sg27" // optional
}
您可以使用以下 SQL 语句来选择出
measurement
,data_type
和value
这些字段:SELECT
payload.measurement, payload.data_type, payload.value, clientid as payload.device_id
FROM
"root/#"
对于不同结构的 payload,可以使用下面的规则对结构进行重写:
SELECT
payload.measurement, payload.dtype as payload.data_type, payload.val as payload.value
FROM
"root/#"
点击添加动作按钮,在下拉框中选择使用数据桥接转发,选择之前创建好的 Apache IoTDB 数据桥接。
提示
如果您在创建完数据桥接后直接点击创建规则,这些选项已经过配置,您可以跳过这一步和下一步。
点击添加按钮确认添加动作。
点击最下方创建按钮完成规则创建。
至此我们已经完成数据桥接和转发规则的创建,您可前往 数据集成 -> Flows 页面查看拓扑图,可看到 root/#
主题的消息被转发至 Apache IoTDB。
测试数据桥接和规则
您可通过 EMQX Dashboard 内置的 WebSocket 客户端进行规则和数据桥接的验证。
在 Dashboard 页面,点击左侧导航目录中的 问题分析 -> WebSocket 客户端。
填写当前 EMQX 的连接信息。
- 如果 EMQX 在本地运行,可直接使用默认配置。
- 如果您修改过 EMQX 的默认配置,如修改过访问规则的配置,则需要输入用户名和密码。
点击连接,建立该 WebSocket 客户端与 EMQX 的连接。
前往发布区域,在消息 payload 中设置设备 ID并发布消息:
主题:
root/test
Payload:
{
"measurement": "temp",
"data_type": "FLOAT",
"value": "37.6",
"device_id": "root.sg27"
}
QoS:
2
点击发布完成消息的发送。
您也可以在主题中设置设备 ID, 并再次发布消息:
主题:
root/sg27
Payload:
{
"measurement": "temp",
"data_type": "FLOAT",
"value": "36.6"
}
QoS:
2
提示
如果主题不以
root
开头,系统将自动为其添加前缀。例如,如果您将消息发布到test/sg27
,生成的设备名称将为root.test.sg27
。请确保您的规则和主题已正确配置,以便将来自该主题的消息转发到桥接。点击发布完成消息的发送。
如果数据桥接和规则创建成功,消息应该已被转发至 Apache IoTDB 服务器里指定的时序数据表中。
您可以使用 IoTDB 的命令行查看。如果服务器在 docker 中运行,可以使用下面的命令连接服务器:
$ docker exec -ti iotdb-service /iotdb/sbin/start-cli.sh -h iotdb-service
在控制台中继续输入:
IoTDB> select * from root.sg27
您将能看到以下返回结果:
+------------------------+--------------+
| Time|root.sg27.temp|
+------------------------+--------------+
|2023-05-05T14:26:44.743Z| 37.6|
|2023-05-05T14:27:44.743Z| 36.6|
+------------------------+--------------+