2. ThingsBoard 平台基础:架构、核心组件与数据流模型

在深入数据导出方案之前,必须理解 ThingsBoard 的底层架构与数据流转机制。本章将拆解 ThingsBoard 的微服务架构、规则链引擎、节点类型、队列模型以及数据从设备到存储的完整路径,为后续 CSV 与 Kafka 集成打下坚实基础。

2.1 ThingsBoard 整体架构简介

ThingsBoard 采用微服务 + 消息队列的松耦合架构,核心服务围绕 Transport(传输层)、Core(核心服务)、Rule Engine(规则引擎)三大模块构建。各模块通过 Kafka 或内存队列异步通信,支持水平扩展。

架构要点: 传输层负责设备协议接入(MQTT / HTTP / CoAP / LwM2M);核心服务处理设备管理、租户、用户、告警等元数据;规则引擎负责数据过滤、转换、持久化与外部集成。
ThingsBoard 微服务架构总览 ThingsBoard 微服务架构总览 设备层 (Devices) MQTT / HTTP / CoAP / LwM2M / SNMP 传输层 (Transport Layer) MQTT Transport · HTTP Transport · CoAP Transport · LwM2M Transport 消息队列 (Kafka / InMemory) 核心服务 (Core Services) 设备管理 · 租户 · 用户 · 告警 · OTA 规则引擎 (Rule Engine) 规则链 · 节点 · 队列 · 数据导出 存储层 (PostgreSQL / Cassandra / TimescaleDB / Kafka) 实体数据 · 时序数据 · 事件日志 · 队列消息

2.2 核心组件详解

2.2.1 规则链(Rule Chain)

规则链是 ThingsBoard 数据处理的核心编排单元,由一系列节点(Node)通过关系(Relation)连接而成的有向无环图(DAG)。每条规则链处理特定类型的消息(Telemetry、Attributes、RPC Request 等),消息从根节点(Root Rule Chain)流入,经过过滤、转换、增强、持久化或导出后流出。

规则链类型作用范围典型用途
Root Rule Chain系统全局所有租户消息的入口,分发到租户链
Tenant Rule Chain租户级别按租户隔离的业务处理逻辑
Device Profile Rule Chain设备配置级别按设备类型定制的处理流程

2.2.2 节点(Node)

节点是规则链中的最小执行单元,每个节点完成一个原子操作。节点通过入参(Inbound)接收消息,处理后通过出参(Outbound)发送到下一个节点。节点类型分为六大类:

  • Filter 节点: 条件过滤,如 Check Relation、Message Type Filter、Script Filter。
  • Transform 节点: 数据转换,如 Script Transform、Change Originator、Rename Keys。
  • Action 节点: 执行操作,如 Save Timeseries、Save Attributes、Create Alarm。
  • External 节点: 外部集成,如 Kafka Producer、MQTT Producer、REST API Call、CSV Export。
  • Enrichment 节点: 数据增强,如 Originator Attributes、Customer Attributes、Tenant Attributes。
  • Split 节点: 消息拆分,如 Split Array、Gateway Telemetry。
关键提示: 数据导出到 CSV 或 Kafka 主要依赖 External 节点 中的 Kafka Producer Node 和 REST API Call Node(配合 CSV 生成服务)。理解节点配置中的 Queue Name 和 Retry Policy 是保证导出可靠性的关键。

2.2.3 队列(Queue)

队列是规则引擎的异步缓冲层,用于解耦消息生产与消费。每个规则链节点可以绑定一个队列,队列决定消息的提交策略、重试机制和并发度。ThingsBoard 内置两种队列实现:

队列类型实现方式适用场景持久化
InMemory Queue内存队列开发测试、低吞吐场景否(重启丢失)
Kafka QueueApache Kafka生产环境、高吞吐、高可靠是(可配置持久化)

队列配置参数(在 thingsboard.yml 中定义)直接影响数据导出性能:

# 队列配置示例(Kafka 模式)
queue:
  type: kafka
  kafka:
    bootstrap_servers: "localhost:9092"
    topic_properties: "retention.ms=604800000"  # 7天保留
    request_timeout_ms: 30000
    max_in_flight_requests_per_connection: 5

# 规则引擎节点队列绑定
rule_engine:
  queues:
    Main:
      poll_interval: 25
      pack_processing_timeout: 2000
      submit_strategy: BURST  # BURST / SEQUENTIAL_BY_ORIGINATOR
    HighPriority:
      poll_interval: 10
      pack_processing_timeout: 1000
      submit_strategy: SEQUENTIAL_BY_ORIGINATOR

2.3 数据流模型

理解数据从设备到存储的完整路径,是配置导出规则的前提。ThingsBoard 的数据流遵循 “设备 → 传输 → 队列 → 规则引擎 → 存储/导出” 的标准化管道。

ThingsBoard 数据流模型与规则链处理流程 数据流模型:设备 → 规则链 → 存储/导出 ① 设备 遥测/属性/RPC ② 传输层 协议解析 · 认证 ③ 消息队列 Kafka / InMemory ④ 规则引擎 规则链 · 节点处理 规则链内部展开 Filter 节点 Transform Action 节点 External 节点 (Kafka / CSV / REST) ⑤ 存储 / 导出目标:PostgreSQL · Cassandra · TimescaleDB · Kafka Topic · CSV 文件 · 外部 API

2.4 数据流关键路径说明

  1. 设备上报: 设备通过 MQTT/HTTP/CoAP 协议上报遥测数据或属性更新,传输层完成协议解析与设备认证。
  2. 消息入队: 传输层将解析后的消息发布到指定的队列(Kafka Topic 或 InMemory Queue),消息包含 msgType、originator、data、metadata 等字段。
  3. 规则引擎消费: 规则引擎从队列拉取消息,根据消息类型路由到对应的规则链。规则链中的节点按配置顺序执行过滤、转换、增强、持久化或导出操作。
  4. 数据导出: 当消息到达 External 节点(如 Kafka Producer Node 或 REST API Call Node)时,数据被导出到外部系统。CSV 导出通常通过 REST API 调用外部微服务生成,或通过 Kafka 消息触发下游 CSV 生成器。
  5. 持久化: 规则链中的 Action 节点(如 Save Timeseries、Save Attributes)将数据写入数据库,确保数据不丢失。
常见误区: 初学者常认为规则链是“实时同步”的,实际上规则链通过队列异步处理,消息可能因队列积压或节点处理超时而延迟。导出任务应关注 队列积压指标(queue.size)和 节点处理耗时(node.processing.time),避免导出延迟过高。

2.5 数据导出相关节点速查表

节点名称类型用途导出方式
Kafka ProducerExternal将消息发送到指定的 Kafka Topic异步消息
REST API CallExternal通过 HTTP POST/PUT 调用外部 REST 服务同步/异步
MQTT ProducerExternal将消息转发到外部 MQTT Broker异步消息
Save TimeseriesAction将遥测数据持久化到时序数据库内部存储
Save AttributesAction将属性数据持久化到实体属性表内部存储
Script TransformTransform使用 JavaScript/TBEL 转换消息格式预处理
Split ArraySplit将数组消息拆分为多条独立消息预处理