ClickHouse在物联网(IoT)中的应用:实时监控与分析

简介: 【10月更文挑战第27天】随着物联网(IoT)技术的快速发展,越来越多的设备被连接到互联网上,产生了海量的数据。这些数据不仅包含了设备的状态信息,还包括用户的使用习惯、环境参数等。如何高效地处理和分析这些数据,成为了一个重要的挑战。作为一位数据工程师,我在一个物联网项目中深入使用了ClickHouse,以下是我的经验和思考。

随着物联网(IoT)技术的快速发展,越来越多的设备被连接到互联网上,产生了海量的数据。这些数据不仅包含了设备的状态信息,还包括用户的使用习惯、环境参数等。如何高效地处理和分析这些数据,成为了一个重要的挑战。作为一位数据工程师,我在一个物联网项目中深入使用了ClickHouse,以下是我的经验和思考。
1111.png

一、项目背景

我们的客户是一家智能家居公司,拥有数百万台连接设备,包括智能灯泡、智能插座、温湿度传感器等。这些设备每秒钟都会产生大量的数据,需要实时监控设备状态,同时还需要对历史数据进行分析,以便优化产品和服务。

二、ClickHouse简介

ClickHouse 是一个高性能的列式数据库管理系统(Column-Oriented DBMS),专为在线分析处理(OLAP)场景设计,支持实时查询,并且具有极高的查询性能。ClickHouse 使用SQL作为查询语言,这使得熟悉关系型数据库的用户可以快速上手。此外,ClickHouse 还支持分布式部署,可以在多个节点之间扩展以应对更大规模的数据集。

三、ClickHouse在物联网中的应用

1. 大规模数据处理

物联网设备产生的数据量非常大,传统的关系型数据库往往难以应对。ClickHouse 的列式存储和高效的压缩算法使其能够高效地处理大规模数据。

数据导入

假设我们有一个MQTT消息队列,用于接收设备上报的数据。我们可以使用Apache Flink消费这些消息,并将数据实时写入ClickHouse。

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import org.apache.flink.connector.jdbc.JdbcOutputFormat;

public class IoTDataIngestion {
   
    public static void main(String[] args) throws Exception {
   
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 消费MQTT消息
        DataStream<String> mqttDataStream = env.addSource(new FlinkMqttSource("tcp://mqtt-broker:1883", "iot/topic"));

        // 解析消息并转换为Tuple
        DataStream<Tuple2<String, Double>> parsedDataStream = mqttDataStream.map(new MapFunction<String, Tuple2<String, Double>>() {
   
            @Override
            public Tuple2<String, Double> map(String value) throws Exception {
   
                String[] parts = value.split(",");
                return new Tuple2<>(parts[0], Double.parseDouble(parts[1]));
            }
        });

        // 将数据写入ClickHouse
        parsedDataStream.addSink(JdbcOutputFormat.buildJdbcOutputFormat()
            .setDrivername("ru.yandex.clickhouse.ClickHouseDriver")
            .setDBUrl("jdbc:clickhouse://localhost:8123/default")
            .setQuery("INSERT INTO device_data (device_id, temperature) VALUES (?, ?)")
            .setParameterTypes(Types.VARCHAR, Types.DOUBLE)
            .finish());

        env.execute("IoT Data Ingestion to ClickHouse");
    }
}
2. 实时监控设备状态

实时监控设备状态是物联网应用中的一个重要需求。ClickHouse 支持高效的实时查询,可以快速获取设备的最新状态信息。

实时查询

假设我们需要实时监控某个设备的温度变化,可以使用以下SQL查询:

SELECT device_id, temperature, toDateTime(timestamp) AS time
FROM device_data
WHERE device_id = 'device_001'
ORDER BY time DESC
LIMIT 10;
实时报警

结合实时查询,我们可以在应用程序中设置阈值,当设备温度超过某个阈值时,触发报警。

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.tuple.Tuple3;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class RealTimeAlerts {
   
    public static void main(String[] args) throws Exception {
   
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 假设我们已经从ClickHouse中读取了实时数据
        DataStream<Tuple3<String, Double, Long>> realTimeDataStream = env.fromElements(
            new Tuple3<>("device_001", 25.0, System.currentTimeMillis()),
            new Tuple3<>("device_001", 27.0, System.currentTimeMillis())
        );

        // 设置温度阈值
        double temperatureThreshold = 26.0;

        // 实时报警
        realTimeDataStream.filter(new FilterFunction<Tuple3<String, Double, Long>>() {
   
            @Override
            public boolean filter(Tuple3<String, Double, Long> value) throws Exception {
   
                return value.f1 > temperatureThreshold;
            }
        }).map(new MapFunction<Tuple3<String, Double, Long>, String>() {
   
            @Override
            public String map(Tuple3<String, Double, Long> value) throws Exception {
   
                return "Alert: Device " + value.f0 + " temperature exceeds threshold (" + value.f1 + ")";
            }
        }).print();

        env.execute("Real-Time Alerts");
    }
}
3. 历史数据分析

除了实时监控,对历史数据的分析也是物联网应用的重要部分。ClickHouse 提供了丰富的SQL功能,可以轻松进行历史数据的查询和分析。

历史数据查询

假设我们需要查询过去一周内某个设备的平均温度,可以使用以下SQL查询:

SELECT device_id, AVG(temperature) AS avg_temperature
FROM device_data
WHERE device_id = 'device_001' AND timestamp >= now() - INTERVAL 1 WEEK
GROUP BY device_id;
趋势分析

结合历史数据,我们可以进行趋势分析,例如绘制温度随时间变化的图表。

import pandas as pd
import matplotlib.pyplot as plt
from sqlalchemy import create_engine

# 创建数据库连接
engine = create_engine('clickhouse+native://default:@localhost:8123/default')

# 查询历史数据
query = """
SELECT device_id, temperature, toDateTime(timestamp) AS time
FROM device_data
WHERE device_id = 'device_001' AND timestamp >= now() - INTERVAL 1 WEEK
ORDER BY time
"""
df = pd.read_sql(query, engine)

# 绘制温度随时间变化的图表
plt.figure(figsize=(10, 6))
plt.plot(df['time'], df['temperature'])
plt.xlabel('Time')
plt.ylabel('Temperature')
plt.title('Temperature Trend for Device 001')
plt.grid(True)
plt.show()

四、总结

通过将ClickHouse应用于物联网场景,我们成功地实现了大规模设备数据的高效处理、实时监控和历史数据分析。ClickHouse 的高性能和易用性使其成为物联网数据处理的理想选择。希望我的经验分享能够帮助你在物联网项目中更好地利用ClickHouse。如果你有任何问题或建议,欢迎随时联系我。

相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
2月前
|
存储 消息中间件 监控
MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
蒋星熠Jaxonic,数据领域技术深耕者。擅长MySQL到ClickHouse链路改造,精通实时同步、数据校验与延迟治理,致力于构建高性能、高一致性的数据架构体系。
MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
|
4月前
|
传感器 运维 数据可视化
AR眼镜巡检系统在工业互联网的应用:AR+IoT
AR与IoT融合构建虚实闭环,IoT采集实时数据,AR直观呈现并交互,形成感知-分析-决策-行动高效闭环,提升运维效率。
|
7月前
|
物联网
(手把手)在华为云、阿里云搭建自己的物联网MQTT消息服务器,免费IOT平台
本文介绍如何在阿里云搭建自己的物联网MQTT消息服务器,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
2690 42
|
8月前
|
数据采集 监控 网络协议
​MCP协议深度解析:原理、应用与物联网时代的机遇-优雅草卓伊凡
​MCP协议深度解析:原理、应用与物联网时代的机遇-优雅草卓伊凡
920 40
​MCP协议深度解析:原理、应用与物联网时代的机遇-优雅草卓伊凡
|
8月前
|
存储 SQL 监控
ClickHouse 应用剖析:设计理念、机制与实践
ClickHouse 是一款高性能的列式数据库管理系统,主要用于实时的大数据分析场景。它由俄罗斯 Yandex 公司开源于 2016 年,在网页日志分析、物联网监控、广告计费等领域有广泛应用。ClickHouse 通过列式存储、向量化执行和分布式架构,实现对海量数据的快速查询分析。本文将介绍 ClickHouse 的设计理念,以及在实际使用中如何处理数据删除更新、冷热数据分离等问题,并提供常见配置的调优建议和异常问题的处理方法。
1106 14
ClickHouse 应用剖析:设计理念、机制与实践
|
6月前
|
传感器 边缘计算 物联网
淘宝商品详情 API 与物联网技术融合的创新应用探索
在传统电商架构中,商品数据主要存储于云端服务器,但物联网设备的实时数据采集需求催生了边缘计算节点的部署。以智能货架为例,每个货架内置的RFID传感器与重量感应器实时采集商品库存变动数据,通过边缘计算网关进行数据预处理(如去重、异常值过滤),仅将关键信息(如库存低于阈值、商品被频繁拿起)通过淘宝商品详情API同步至云端。这种“边缘过滤+云端聚合”的模式,将数据传输量降低70%以上,同时确保库存数据的秒级更新。
Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备状态监测中的应用与挑战(167)
本文围绕基于 Java 的大数据实时流处理技术,深入探讨其在工业物联网设备状态监测中的应用与挑战。不仅介绍了技术架构、原理和案例,还引入边缘计算技术,提出应对数据质量、性能和安全等问题的策略。
|
9月前
|
存储 监控 安全
工业物联网关应用:PLC数据通过智能网关上传阿里云实战
本文介绍如何使用智能网关将工厂PLC数据传输至阿里云平台,适合中小企业远程监控设备状态。硬件准备包括三菱FX3U PLC、4G智能网关和24V电源。接线步骤涵盖PLC编程口与网关连接、运行状态检测及天线电源接入。配置过程涉及通讯参数、阿里云对接和数据点映射。PLC程序关键点包括数据上传触发和温度值处理。阿里云平台操作包含实时数据查看、数据可视化和规则引擎设置。最后提供常见故障排查表和安全建议,确保系统稳定运行。
867 1
|
9月前
|
传感器 人工智能 物联网
健康监测设备的技术革命:AI+物联网如何让你随时掌握健康数据?
健康监测设备的技术革命:AI+物联网如何让你随时掌握健康数据?
1225 19
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
447 60

推荐镜像

更多