1. 课程导入与物联网时序数据平台全景

物联网时序数据平台,是专门用来接收、存储、查询和分析“带时间戳的传感器/设备数据”的一类数据基础设施。它要解决的核心问题不是“存一条记录”,而是“在设备数量多、上报频率高、数据只增不改、查询以时间范围为主”的条件下,仍然能稳定写入、快速检索、长期留存并支撑分析。典型数据形如:设备编号 dev-1024、测点 temp、时间 2025-03-01T08:00:00Z、数值 23.6、质量码 0。一条数据本身很小,但每秒百万条持续写入时,平台的设计重点就从“表结构”转向“写入路径、分区策略、压缩编码与查询裁剪”。

本课程的学习目标可以归纳为四层能力:第一,能说清时序数据平台与通用关系库、缓存、消息队列的边界与协作关系;第二,能根据设备规模、采样频率、保留周期估算写入吞吐与存储容量;第三,能设计出从设备接入、消息缓冲、时序存储、查询服务到可视化与告警的整体分层架构;第四,能针对乱序、重复、断点续传、降采样等真实问题给出可落地的处理方案。学完后,你应当能独立画出一张平台架构图,并为每一层标注关键组件、接口协议与容量参数。

核心概念与平台边界

时序数据有五个区别于普通业务数据的特征:时间主键性(时间戳是查询与分区的第一维度)、写多读少且追加写(几乎不更新历史值)、高基数(设备×测点组合可能达千万级)、冷热分层明显(近 7 天高频查,半年前多为归档)、允许近似(监控场景常接受降采样与插值)。理解这五点,才能判断哪些组件适合放在哪一层。

平台边界要划清:设备侧网关负责协议转换与本地缓存,不属于平台内部;消息队列负责削峰与解耦,是平台的“入口缓冲”;时序数据库负责持久化与时间范围检索;查询/计算层负责聚合、降采样与告警判定;应用层负责看板、报表与开放 API。边界之外的系统(如 ERP、工单)通过 API 或数据订阅与平台交互,不直接写时序库。

判断一个需求是否属于时序平台:若查询条件以“时间范围 + 设备/测点标签”为主,且数据写入后基本不变,则属于;若以事务、关联更新、复杂多表 join 为主,则应交给关系库或数仓。

典型应用场景

  • 工业设备监控:采集振动、温度、电流,采样周期 100ms~1s,用于故障预警与能效分析。
  • 车联网:车辆位置、车速、电池状态,上报频率 1~10s,需支持轨迹回放与地理围栏。
  • 能源电力:电表、光伏逆变器数据,15 分钟一个点,强调长期留存与结算级准确性。
  • 智慧楼宇:温湿度、空调能耗,分钟级采集,侧重看板与阈值告警。

这些场景的共同点是:设备多、点位多、写入持续、查询按时间切片。差异在于采样频率、乱序程度、保留年限与一致性要求,这些差异会直接改变存储引擎选型和分区粒度。

整体架构分层

一个可落地的物联网时序数据平台通常分为六层,数据自下而上流动,控制与查询自上而下下发。下图给出分层结构与关键组件、协议及数据形态,便于建立全局视图。

物联网时序数据平台六层架构 数据自下而上写入,查询与控制自上而下下发 ① 设备接入层 传感器 / PLC / 网关 · MQTT、Modbus、OPC UA、HTTP · 本地缓存与断点续传 输出:原始报文(含设备ID、测点、时间戳、值、质量码) ② 消息缓冲层 Kafka / Pulsar / RocketMQ · 削峰、解耦、多消费者 · 分区键 = 设备ID 输出:有序消息流(同一设备分区内保序) ③ 时序存储层 时序数据库(TDengine / InfluxDB / TimescaleDB)· 时间分区 + 标签索引 · 列式压缩 热数据(SSD,近7天)→ 温数据(HDD,近90天)→ 冷数据(对象存储,归档) 关键参数:分区粒度、副本数、保留策略、压缩算法 ④ 查询与计算层 聚合、降采样、插值、窗口函数 · 流计算(Flink)· 规则引擎 输出:时间序列结果集、告警事件、指标快照 ⑤ 服务与 API 层 REST / gRPC / WebSocket · 鉴权、限流、租户隔离 · 查询结果缓存 输出:标准化查询接口与订阅推送 ⑥ 应用层 实时看板、历史报表、告警通知、开放平台、第三方集成 输出:可视化图表、告警消息、数据订阅 查询 / 控制下发 数据写入

图中六层并非必须全部自建:小规模场景可把消息缓冲与时序库合并,用数据库自带写入队列;大规模场景则需在接入层与缓冲层之间增加协议适配集群。但无论规模如何,“接入—缓冲—存储—计算—服务—应用”这条数据主链不能缺环,否则会出现写入丢数、查询拖垮写入、告警延迟等问题。

容量估算示例

假设某工厂有 2000 台设备,每台 20 个测点,采样周期 1 秒,每条记录约 40 字节(含时间戳、标签、值、质量码)。写入速率约为 2000×20÷1 = 40000 点/秒,原始带宽约 40000×40 = 1.6 MB/s。若保留 1 年,原始数据量约 1.6 MB/s×86400×365 ≈ 50 TB。采用列式压缩(典型压缩比 8:1~15:1)后,实际占用约 3.3~6.3 TB。这个估算决定了分区粒度(建议按天分区,单分区约 138 GB 原始、压缩后 9~17 GB)和冷热分层策略(近 7 天 SSD,其余 HDD 或对象存储)。

估算时必须区分“原始字节数”与“压缩后落盘量”,并预留 30% 余量应对乱序写入、副本和索引开销。若忽略压缩比,容易高估存储成本;若忽略副本,则容易低估。