MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布/订阅(Publish/Subscribe)模式的消息传输协议,最初由IBM于1999年开发,目前已经成为物联网(IoT)、车联网、工业互联网、智能家居、边缘计算、AI设备最广泛使用的通信协议之一。
随着AI Agent、机器人、智能穿戴、自动驾驶的发展,MQTT的重要性越来越高。例如:
-
ChatGPT智能硬件
-
人形机器人
-
无人机
-
自动驾驶汽车
-
工业PLC
-
智能电表
-
摄像头
-
AI眼镜
-
智能穿戴设备
几乎都会使用MQTT。
一、为什么需要MQTT?
假设有100万个智能设备。
传统HTTP通信:
设备
|
| HTTP Request
|
服务器
特点:
-
每次建立TCP连接
-
Header很大
-
请求-响应模式
-
服务器压力大
-
不能主动推送
例如:
设备每5秒上传一次温度
100万台设备
每秒:
200000 HTTP请求
服务器压力非常大。
MQTT则不同:
设备
|
| TCP长连接
|
MQTT Broker
设备一直保持连接。
以后:
publish
publish
publish
不用重复建立连接。
所以:
网络流量降低90%以上。
MQTT适用于:
✓ 网络不好
例如:
4G
5G
NB-IoT
LoRa
卫星网络
甚至:
100KB/s
也可以工作。
二、MQTT特点
MQTT最大的特点:
① 极轻量
HTTP Header:
几百Byte
MQTT:
最小只有:
2 Byte
例如:
固定头:
00010000
仅2字节。
② 发布/订阅模型
不是:
客户端
|
服务器
而是:
Publisher
↓
Broker
↓
Subscriber
例如:
温度传感器
Publish
topic:
factory/temp
Broker收到:
factory/temp
任何订阅:
factory/temp
的人都会收到。
③ 解耦
Publisher不知道:
谁接收
Subscriber不知道:
谁发送
中间全部由Broker负责。
所以:
非常容易扩展。
④ 长连接
一直保持:
TCP Connection
例如:
CONNECT
↓
CONNACK
↓
PINGREQ
↓
PINGRESP
↓
PUBLISH
不会频繁断开。
⑤ 双向通信
HTTP:
Client →
Server
MQTT:
Device ←→ Broker
Broker可以主动推送。
例如:
设备:
在线
↓
Broker:
立即发送:
升级命令
三、MQTT整体架构
+----------------------+
| Application |
+----------------------+
Publish Subscribe
\ /
MQTT Broker
/ | \
Sensor Robot APP AI Agent
Broker就是整个系统核心。
四、MQTT核心角色
Publisher
发送消息。
例如:
机器人
上传位置
Publish
Subscriber
接收消息。
例如:
控制中心
订阅:
robot/location
收到:
机器人位置
Broker
MQTT服务器。
负责:
接收
存储
过滤
转发
所有消息。
五、Topic(主题)
MQTT没有URL。
而是:
Topic。
例如:
factory/temp
factory/humidity
robot/001/location
robot/001/camera
robot/002/status
Broker按照Topic转发。
Topic支持层级:
/
例如:
home
↓
home/livingroom
↓
home/livingroom/light
通配符
+
表示:
一层。
例如:
robot/+/status
可以收到:
robot/001/status
robot/002/status
robot/888/status
表示:
全部。
例如:
robot/#
收到:
robot/001/status
robot/001/location
robot/002/camera
六、MQTT数据流程
例如:
机器人上传坐标。
Robot
Publish
topic:
robot/001/location
↓
Broker
↓
AI平台
↓
地图系统
↓
监控系统
Publisher无需知道谁接收。
七、QoS(服务质量)
MQTT最大的特点之一。
有三个等级。
QoS 0
At most once
最多一次。
发送
结束
不确认。
可能丢。
适合:
GPS
温度
实时监控
因为:
下一秒还有数据。
QoS 1
至少一次
流程:
Publish
↓
PUBACK
如果没收到ACK:
重发
所以:
可能重复。
例如:
订单通知
报警
QoS 2
最高等级。
Exactly once
流程:
Publish
↓
PUBREC
↓
PUBREL
↓
PUBCOMP
四次握手。
绝不会重复。
适合:
支付
金融
设备控制
八、Retained Message(保留消息)
例如:
灯状态。
Light:
ON
Broker保存:
retain=true
以后:
新的Subscriber上线。
立即收到:
ON
不用等下一次发布。
九、Last Will(遗嘱消息)
设备异常断线:
Broker自动发布:
robot/001/offline
例如:
payload:
offline
监控平台立即知道:
机器人掉线。
十、Session(会话)
Clean Session:
true
断线:
所有订阅删除。
Persistent Session:
false
Broker保存:
订阅
离线消息
重新上线继续接收。
MQTT 5.0 中进一步演进为 Session Expiry Interval,可以设置会话过期时间,而不是简单的永久或立即删除。
十一、MQTT报文类型
MQTT 3.1.1 定义了 14 种控制报文:
| 报文 | 作用 |
|---|---|
| CONNECT | 建立连接 |
| CONNACK | 连接确认 |
| PUBLISH | 发布消息 |
| PUBACK | QoS1确认 |
| PUBREC | QoS2第一步 |
| PUBREL | QoS2第二步 |
| PUBCOMP | QoS2完成 |
| SUBSCRIBE | 订阅 |
| SUBACK | 订阅确认 |
| UNSUBSCRIBE | 取消订阅 |
| UNSUBACK | 取消确认 |
| PINGREQ | 心跳请求 |
| PINGRESP | 心跳响应 |
| DISCONNECT | 主动断开 |
十二、MQTT Broker主流实现
| Broker | 特点 | 适用场景 |
|---|---|---|
| EMQX | 高性能、高并发、支持集群,百万级连接 | 企业物联网、AI设备平台 |
| Eclipse Mosquitto | 轻量、易部署 | 开发测试、小型项目 |
| HiveMQ | 企业级、商业支持丰富 | 金融、工业互联网 |
| VerneMQ | Erlang实现,支持分布式 | 大规模IoT平台 |
| RabbitMQ MQTT Plugin | RabbitMQ扩展协议 | 已使用RabbitMQ生态的系统 |
十三、MQTT 与 Kafka、RabbitMQ 对比
| 对比项 | MQTT | Kafka | RabbitMQ |
|---|---|---|---|
| 通信模式 | 发布/订阅 | 日志流 | 队列+发布/订阅 |
| 面向对象 | IoT设备 | 大数据流处理 | 企业消息 |
| 是否长连接 | 是 | 否(客户端按需拉取/消费) | 是(AMQP等协议) |
| 消息持久化 | 可选 | 默认强持久化 | 支持 |
| 吞吐量 | 较高 | 极高(百万级消息/秒) | 高 |
| 延迟 | 毫秒级 | 毫秒~几十毫秒 | 毫秒级 |
| 消费模型 | Broker主动推送 | Consumer主动拉取 | Broker推送 |
| 典型应用 | 智能设备、机器人 | 日志、实时数仓、事件流 | 微服务、业务系统 |
经验法则:
-
MQTT:设备连接与设备控制。
-
Kafka:海量事件流、实时计算、数据平台。
-
RabbitMQ:业务消息、事务流程、异步解耦。
十四、MQTT 在 AI 数据平台中的应用
结合你关注的 AI 数据平台、机器人、动捕(Mocap)、Egocentric 智能穿戴设备,MQTT 非常适合作为边缘设备接入层。
典型架构如下:
机器人 / Mocap设备 / AI眼镜 / 摄像头
│
MQTT Publish
│
MQTT Broker(EMQX)
│
┌──────────┼──────────┐
│ │ │
Kafka 实时控制 在线监控
│
Flink
│
Iceberg / Hudi / Delta Lake
│
Feature Store
│
模型训练 / AI Agent / RAG
例如:
-
机器人通过 MQTT 上报位置、IMU、传感器状态。
-
EMQX 负责管理百万级设备连接。
-
Kafka 负责持久化和事件流转。
-
Flink 实时清洗、聚合、特征提取。
-
Iceberg/Hudi 存储训练数据。
-
Feature Store(如 Feast) 为在线推理提供特征。
-
AI Agent 或控制平台再通过 MQTT 向设备下发控制指令,实现双向通信。

1293

被折叠的 条评论
为什么被折叠?



