在 IoT 场景中,通常面临设施数量宏大、数据产生速率高、累积数据量微小等挑战。因而,如何接入、存储和解决这些海量设施数据就成为了一个要害的问题。
EMQX 作为一款弱小的物联网 MQTT 音讯服务器,单个集群可解决上亿设施连贯,同时提供了丰盛的数据集成性能。HStreamDB 作为一款分布式流数据库,不仅能够高效存储来自 EMQX 的海量设施数据,而且提供实时处理剖析能力。EMQX 与 HStreamDB 都具备高可扩展性和可靠性,两者联合不仅可能满足大规模 IoT 利用的性能和稳定性需要,同时可能晋升利用的实时性。
近期 EMQX Enterprise 4.4.15 公布,更新了对 HStreamDB 最新版本的反对,本文将具体介绍如何通过 EMQX 规定引擎将数据长久化到 HStreamDB,实现 MQTT 数据流的存储与实时处理。
注:本文介绍的集成步骤基于 EMQX 4.4.15 和 HStreamDB 0.14.0 以上版本。
连贯到 HStreamDB 集群
在上面的教程中,咱们假如有一个正在运行的 EMQX Enterprise 集群和正在运行的 HStreamDB 集群。如需部署 EMQX Enterprise 集群,请参考 EMQX Enterprise docs。如需部署 HStreamDB 集群,请参考 HStreamDB docs,其中蕴含对于如何用 Docker 疾速部署的阐明。
咱们能够通过 Docker 来部署 HStreamDB 客户端并连贯到 HStreamDB 集群:
# 获取帮忙信息
docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream:v0.14.0 hstream --help
咱们在此应用 hstream stream
命令创立一个 stream,供接下来的示例应用:
# 应用 hstream stream 命令创立 streams
docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream:v0.14.0 hstream stream create basic_condition_info_0 -r 3 -b $((7 * 24 * 60 * 60))
接下来,连贯到 HStreamDB 集群,启动交互式 HStream SQL shell:
docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream:v0.14.0 hstream sql --service-url "<<YOUR-SERVICE-URL>>"
# 如果要应用平安连贯,还须要填写 --tls-ca, --tls-key, --tls-cert 参数
如果连贯胜利,将会呈现
__ _________________ _________ __ ___
/ / / / ___/_ __/ __ \/ ____/ | / |/ /
/ /_/ /\__ \ / / / /_/ / __/ / /| | / /|_/ /
/ __ /___/ // / / _, _/ /___/ ___ |/ / / /
/_/ /_//____//_/ /_/ |_/_____/_/ |_/_/ /_/
Command
:h To show these help info
:q To exit command line interface
:help [sql_operation] To show full usage of sql statement
SQL STATEMENTS:
To create a simplest stream:
CREATE STREAM stream_name;
To create a query select all fields from a stream:
SELECT * FROM stream_name EMIT CHANGES;
To insert values to a stream:
INSERT INTO stream_name (field1, field2) VALUES (1, 2);
能够应用 show streams;
来查看曾经创立的 streams 的信息:
> show streams;
+-------------------------------------------+---------+----------------+-------------+
| Stream Name | Replica | Retention Time | Shard Count |
+-------------------------------------------+---------+----------------+-------------+
| basic_condition_info_0 | 3 | 604800 seconds | 1 |
+-------------------------------------------+---------+----------------+-------------+
创立 HStreamDB 资源
在利用 EMQX 规定引擎将数据长久化到 HStreamDB 之前,须要创立一个 HStreamDB 资源。
为此,请拜访 EMQX Dashboard,单击 规定引擎
-> 资源
→ 创立
,抉择 HStreamDB 资源
,输出 HStreamDB 地址并填写必要的选项。可用选项如下表:
在抉择开启 SSL 时,会呈现额定的 SSL 配置界面,能够粘贴所需配置内容或上传文件。
创立数据长久化到 HStreamDB 的规定
点击 规定引擎
-> 规定
-> 创立
。
编辑 SQL 规定并增加操作,您能够在字符串模板中应用 SQL 变量。
请留神,本文档中介绍的 SQL 规定仅供演示,理论的 SQL 应依据业务设计进行编写。
单击 增加操作
,抉择「数据长久化」以将数据保留到 HStreamDB 中。抉择上一步创立的资源并输出参数。可用参数如下表:
点击 确定
来确认增加行为。
在 HStream SQL Shell 中获取实时的数据更新
从 EMQX 规定引擎长久化到 HStreamDB 的数据能够应用 HStream SQL Shell 实时读出新写入 stream 的内容。当初,数据曾经被写入 HStreamDB,能够应用任何生产形式来生产音讯。文档应用了一个简略的生产办法:应用 HStream SQL shell 进行查问。此外,读者能够自由选择应用本人喜爱的编程语言 SDK 编写生产端。
# docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream:v0.14.0 hstream sql
> select * from basic_condition_info_0 emit changes;
以后的 select
查问没有后果可供打印出,这是因为还没有数据通过 EMQX 的规定引擎向 HStreamDB 写入。一旦有数据写入,便能够在 HStream SQL shell 察看到数据的即时更新。目前在 HStreamDB 应用 SQL 对 streams 做查问,只会打印出 创立查问后 的后果。如果在 EMQX 进行向 HStreamDB 写入后创立查问,可能察看不到产生的后果。
向 EMQX 写入音讯测试规定引擎
能够应用跨平台的桌面客户端 MQTT X 来连贯到 EMQX 并发送音讯:
从 EMQX Dashboard 获取规定引擎的运行数据指标
拜访对应的规定引擎界面:
如果规定引擎运行数据指标失常,则代表 EMQX 会将数据长久化到 HStreamDB。一旦写入胜利,便能够在后面步骤启动的 HStream SQL Shell 中看到实时的数据更新。
# docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream:v0.14.0 hstream sql
> select * from basic_condition_info_0 emit changes;
{"current-number-of-people":247.0,"device-health":true,"number-of-people-in-line":14.0,"submitter":"admin-07","temperature":27.0}
{"current-number-of-people":220.0,"device-health":true,"number-of-people-in-line":13.0,"submitter":"admin-07","temperature":27.2}
{"current-number-of-people":135.0,"device-health":true,"number-of-people-in-line":2.0,"submitter":"admin-01","temperature":26.9}
{"current-number-of-people":137.0,"device-health":true,"number-of-people-in-line":0.0,"submitter":"admin-01","temperature":26.9}
结语
至此,咱们就实现了通过 EMQX 规定引擎将数据长久化到 HStreamDB 的次要流程。
将 EMQX 采集到的数据存储到 HStreamDB 后,能够对这些数据进行实时处理与剖析,为下层 AI、大数据等利用提供撑持,进一步挖掘和利用数据价值。作为首个专为流数据设计的云原生流数据库,HStreamDB 与 EMQX 联合能够实现一站式存储和实时处理海量物联网数据,精简物联网利用数据栈,减速企业的物联网利用开发。
版权申明:本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/integration-practice-of-emqx-and-hstreamdb