使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控

本文主要是介绍使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在物联网(IoT)背景下,处理实时数据会遇到一些特定的障碍,如边缘计算资源不足、网络条件限制、扩展性存在问题、设备间有多样性差异。要克服这些挑战,需要高效的边缘计算技术、强大的安全措施、标准化协议、可扩展的管理系统和先进的数据处理能力。

通过综合利用 NATS JetStream、RisingWave 和 Superset,可以构建一个强大的解决方案,用于开发可靠且可扩展的实时物联网应用。

RisingWave 是什么?

RisingWave 是与 PostgreSQL 兼容的流数据库,具有成本效益、可扩展性和真正的云原生架构。它允许用户使用 SQL 从流数据中获取实时见解,易于设置、使用和操作。

NATS JetStream 是什么?

NATS 是一种安全连接技术,设计用于在分布式系统中发现和交换信息。它可以部署在任何环境中,用于微服务、数据流和物联网等不同用例,支持边缘设备,可使用多种语言和客户端进行交互。JetStream 构建在 NATS 之上,支持消息流的持久化。

Superset 是什么?

Apache Superset 是一个现代化数据探索和数据可视化平台。它是一款开源软件,可以取代或增强许多团队的专有商业智能工具。

概述

本文将深入探讨一个物联网场景,重点关注通过物联网传感器监控温度和湿度数据。我们将探讨 NATS JetStream 如何使边缘设备能够轻松将数据流传输到 RisingWave 并进行实时处理。通过窗口操作和聚合,RisingWave 可以高效地对数据进行高级分析。最后,我们将使用 Superset 创建表、图表和集成看板,对处理和分析的数据进行可视化。

实时物联网应用开发解决方案

1. 设置 NATS JetStream

NATS 服务器经过高度优化,其二进制文件不到 20 MB,使其可以轻松在各种机器上运行。无论是在 Raspberry Pi 还是规模宏大的服务器上,也无论是在云端、本地、边缘、裸机、虚拟机还是在容器中,均可轻松运行。

您可以使用 Docker 安装 NATS JetStream,如下所示:

docker pull nats:latest

要在 Docker 上运行 NATS JetStream,可以使用 -js Flag 启动 NATS 服务器。此 Flag 可启用 JetStream 功能,使您能够充分利用其各项功能。

docker run -p 4222:4222 -ti nats:latest -js

该 Docker 命令可启动 NATS JetStream。现在,您可以通过各种语言和客户端发布和订阅信息。

在 4222 端口运行的 NATS JetStream 服务器

2. 向 JetStream 发布数据

在此示例中,我们使用 iot_data 主题将物联网数据发布到 JetStream 的 Stream event_stream 中。下面是正在发布的数据示例:

'{"device_Id":"sensor1","temperature":25,"ts":"2023-01-05 05:50:00+00:00"},
'{"device_Id":"sensor1","temperature":26,"ts":"2023-01-05 05:50:01+00:00"}'
'{"device_Id":"sensor2","humidity":60,"ts":"2023-01-05 05:50:01+00:00"}'
'{"device_Id":"sensor1","temperature":27,"ts":"2023-01-05 05:50:02+00:00"}'
'{"device_Id":"sensor2","humidity":62,"ts":"2023-01-05 05:50:02+00:00"}'

3. 从 RisingWave 摄取 JetStream 的数据

我们可以使用开源 RisingWave 或托管服务(RisingWave Cloud)来摄取和处理流数据。本文将使用 RisingWave Cloud,它能够提供良好的用户体验,简化管理和使用 RisingWave 进行物联网监控的操作。

创建 RisingWave 集群

使用免费计划在 RisingWave Cloud 中创建 RisingWave 集群。有关说明,请参阅 RisingWave Cloud 文档。

RisingWave Cloud:账户注册和登录流程

在 RisingWave 中创建 Source 以摄取数据流

在 RisingWave 中创建 Source,以便从先前设置的 iot_data 主题的 Stream event_stream 中摄取数据。在此示例中,RisingWave 充当 NATS JetStream 的 Stream 和主题的订阅者。

请注意,RisingWave 中带有连接器设置的 Source 会与 Stream 建立连接,但不会持久化流数据。

CREATE SOURCE iot_source(device_Id VARCHAR,temperature VARCHAR,humidity VARCHAR,ts TIMESTAMPTZ
)
WITH (connector='nats',server_url='nats://8.210.9.253:4222',subject='iot_data',stream='event_stream',connect_mode='plain'
)FORMAT PLAIN ENCODE JSON;

4. 在 RisingWave 中进行分析

现在,我们根据名为 iot_source 的 Source 创建一个名为 iot_mv 的物化视图,用于存储传入的数据并进行分析。

CREATE MATERIALIZED VIEW iot_mv AS
SELECT device_Id, temperature,humidity,ts 
FROM iot_source;

可以使用以下 SQL 语句查询结果。

SELECT device_Id, temperature,ts 
from iot_mv
WHERE deviceId ='sensor1'
limit 5;

下面是一个结果示例。

device_id  | temperature |               ts               
----------+-------------+-------------------------------sensor1  |          25 | 2023-01-05 05:50:00+00:00sensor1  |          26 | 2023-01-05 05:50:01+00:00sensor1  |          27 | 2023-01-05 05:50:03+00:00sensor1  |          28 | 2023-01-05 05:50:05+00:00sensor1  |          29 | 2023-01-05 05:50:07+00:00

可以使用以下 SQL 语句查询结果。

SELECT device_Id, humidity,ts 
from iot_mv
WHERE deviceId ='sensor2'
limit 5;
| device_id | humidity |                    ts                    
|----------|----------|------------------------------------------
| sensor2  |    60    | 2023-01-05 05:50:02+00:00 
| sensor2  |    62    | 2023-01-05 05:50:04+00:00 
| sensor2  |    65    | 2023-01-05 05:50:06+00:00 
| sensor2  |    68    | 2023-01-05 05:50:08+00:00 
| sensor2  |    70    | 2023-01-05 05:50:10+00:00

下面的语句可创建一个名为 avg_temperature_mv 的物化视图,用于根据时间戳 ts 计算指定设备 sensor1 在 1 分钟 Tumbling 窗口内的平均温度。结果包括设备 ID、平均温度、窗口开始和窗口结束的列。

CREATE MATERIALIZED VIEW avg_temperature_mv AS
SELECT device_Id, AVG(temperature) AS avg_temperature
window_start, window_end
FROM TUMBLE (iot_mv, ts, INTERVAL '1 MINUTES')
WHERE device_Id ='sensor1'
GROUP BY device_Id,window_start, window_end;

可以使用以下 SQL 语句查询结果。

SELECT * FROM avg_temperature_mv LIMIT 5;

下面是一个结果示例。

| device_id | avg_temperature  |        window_start        |          window_end           
|----------|------------------|----------------------------|--------------------------
| sensor1  |        41        | 2023-01-05T05:56:00Z       | 2023-01-05T05:57:00Z 
| sensor1  |        40        | 2023-01-05T05:50:00Z       | 2023-01-05T05:51:00Z 
| sensor1  |        38        | 2023-01-05T05:55:00Z       | 2023-01-05T05:56:00Z 
| sensor1  |        35        | 2023-01-05T05:54:00Z       | 2023-01-05T05:55:00Z 
| sensor1  |        55        | 2023-01-05T06:01:00Z       | 2023-01-05T06:02:00Z

同样,下面的语句可创建一个名为 avg_humidity_mv 的物化视图,用于根据时间戳 ts 计算指定设备 sensor2 在 1 分钟 Tumbling 窗口内的平均湿度。结果包括设备 ID、平均湿度、窗口开始和窗口结束的列。

CREATE MATERIALIZED VIEW avg_humidity_mv AS
SELECT device_Id, AVG(humidity) AS avg_humidity
window_start, window_end
FROM TUMBLE (iot_mv, ts, INTERVAL '1 MINUTES')
WHERE device_Id ='sensor2'
GROUP BY device_Id,window_start, window_end;

可以使用以下 SQL 语句查询结果。

SELECT * FROM avg_humidity_mv LIMIT 5;

下面是一个结果示例。

| device_Id | avg_humidity |        window_start         |          window_end           
|----------|--------------|-----------------------------|-------------------------------
| sensor2  |   112.33     | 2023-01-05T05:58:00Z | 2023-01-05T05:59:00Z |
| sensor2  |      75      | 2023-01-05T05:53:00Z | 2023-01-05T05:54:00Z |
| sensor2  |      90      | 2023-01-05T05:55:00Z | 2023-01-05T05:56:00Z |
| sensor2  |      95      | 2023-01-05T05:50:00Z | 2023-01-05T05:51:00Z |
| sensor2  |     105      | 2023-01-05T05:57:00Z | 2023-01-05T05:58:00Z |

5. 在 Apache Superset 中可视化数据

我们将配置 Superset,以便从 RisingWave 读取数据并进行可视化。

将 RisingWave 连接到 Superset

可以在 Apache Superset 中将 RisingWave 作为数据源,使用 RisingWave 中的表和物化视图进行可视化和创建看板。要了解该过程,请按照 配置 Superset 从 RisingWave 读取数据 一文中的说明进行操作。

成功将 RisingWave 连接到 Apache Superset 后,我们可将 RisingWave 中的物化视图添加为数据集,以创建表、各种图表和综合看板。

使用 Apache Superset 可视化数据:表、图表和看板

此表由 iot_mv 数据集生成,显示温度传感器 ID、温度读数以及每个读数相应的时间戳等信息。

温度传感器表: 温度传感器 ID、温度读数和时间戳

此表也由 iot_mv 数据集生成,显示湿度传感器 ID、湿度读数以及每个读数相应的时间戳等详细信息。它全面展示了在 iot_mv 物化视图中捕获和存储的湿度数据。

湿度传感器表: 湿度传感器 ID、湿度读数和时间戳

此条形图由 avg_temperature_mv 数据集生成,显示了温度传感器在预定义的 1 分钟时间窗口内获取的平均温度。

平均温度传感器图表:显示温度传感器在 1 分钟窗口内获取的平均温度值

此折线图由 avg_humidity_mv 数据集生成,显示了湿度传感器在指定的 1 分钟时间窗口内获取的平均湿度。

平均湿度传感器图表:显示湿度传感器在 1 分钟窗口内获取的平均湿度值

此综合看板呈现了一系列图表,有助于全面实时监控物联网设备。通过对每个相应时间戳的温度和湿度传感器读数进行深入分析,获取有价值的见解,使用户能够做出明智的决策,并实现对工业物联网设备的有效监控。

物联网设备实时监控看板:基于温度和湿度传感器

总结

本文逐步介绍了如何利用 NATS JetStream、RisingWave 和 Superset 构建实时物联网监控解决方案。以上三个系统的设置过程简单省力,资源效率高且具有强大的可扩展性,是实时物联网应用的理想组合。通过三者的无缝集成,不到一小时即可创建一个实时物联网看板。简而言之,这展示了物联网设备背景下 NATS JetStream、RisingWave 和 Apache Superset 在工业流程中的无缝集成,并通过可视化和看板实现了实时分析和监控。

这篇关于使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876050

相关文章

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数