跳转到内容

MQTT 消息代理对比

MQTT 消息代理对比

本节介绍 IoT 架构中的核心通信组件——MQTT Broker。学习完成后,您将能够:

  • 理解 MQTT Broker 在 IoT 架构中的核心作用
  • 对比 Mosquitto 和 EMQX 的特点和适用场景
  • 向客户推荐合适的 Broker 选型方案
  • 快速部署和配置 MQTT Broker

MQTT Broker 是 MQTT 协议的核心服务器组件,负责:

  • 消息路由: 接收发布者的消息并转发给订阅者
  • 会话管理: 维护客户端连接和会话状态
  • 消息过滤: 基于 Topic 精确路由消息
  • QoS 保障: 实现不同级别的服务质量
  • 连接管理: 处理客户端的连接和断开
设备 1 ── publish ──→ ┌─────────────┐ ── forward ──→ 设备 3
│ MQTT Broker │
设备 2 ── publish ──→ └─────────────┘ ── forward ──→ 设备 4
对比维度Eclipse MosquittoEMQX
开源性完全开源 (EPL/EDL)开源版 + 企业版
语言CErlang
协议支持MQTT 3.1/3.1.1/5.0MQTT 3.1/3.1.1/5.0, CoAP, LwM2M
并发连接数千级别百万级别
集群支持有限(需额外配置)原生支持
规则引擎内置 SQL 规则引擎
扩展性插件机制插件 + 钩子机制
资源占用极低 (~10MB)中等 (~100MB)
部署方式二进制/DockerDocker/Kubernetes
学习成本
社区活跃度高(Eclipse 基金会)高(开源社区)
企业支持第三方服务EMQ 公司

推荐场景:

  • 小型到中型 IoT 部署
  • 边缘计算网关
  • 演示和 PoC 环境
  • 资源受限的嵌入式系统
  • 单机部署方案

优势:

  • 极低的资源消耗(内存 < 10MB)
  • 安装配置极其简单
  • 稳定可靠,生产验证多年
  • 完全免费开源
  • Docker 镜像仅 5MB
Terminal window
# mosquitto.conf - 生产环境配置
# 监听端口
listener 1883
listener 9001
protocol websockets
# 安全配置
allow_anonymous false
password_file /mosquitto/config/password.txt
# 持久化和日志
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
log_type all
# 连接限制
max_connections 1000
max_inflight_messages 100
# 会话配置
persistent_client_expiration 14d
# Docker Compose 部署
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log

推荐场景:

  • 大规模 IoT 部署(万级+设备)
  • 需要集群和高可用
  • 需要规则引擎处理数据
  • 需要多协议支持(MQTT + CoAP + HTTP)
  • 云端原生部署

优势:

  • 百万级并发连接
  • 原生集群支持,高可用
  • 内置 SQL 规则引擎
  • 丰富的数据集成(Webhook, Kafka, DB)
  • 完善的监控和管理 Dashboard
  • Data Bridge 功能
# Docker Compose 部署 EMQX
services:
emqx:
image: emqx:5
container_name: emqx
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "8083:8083" # MQTT/WebSocket
- "8084:8084" # MQTT/TLS
- "18083:18083" # Dashboard
environment:
- EMQX_DASHBOARD__DEFAULT_PASSWORD=YourPassword!
- EMQX_ALLOW_ANONYMOUS=false
volumes:
- ./emqx/data:/opt/emqx/data
- ./emqx/etc:/opt/emqx/etc
功能特性MosquittoEMQX售前考量
安装复杂度⭐ 极简⭐⭐ 简单Mosquitto 更适合快速演示
管理界面无(需 Portainer)内置 Web DashboardEMQX 演示更直观
规则引擎SQL 规则引擎EMQX 可减少 Node-RED 负载
数据持久化配置文件PostgreSQL/MnesiaEMQX 企业级持久化
性能扩展垂直扩展水平扩展集群EMQX 适合成长型方案
安全功能基础 TLS + AuthTLS + Auth + ACL + RBACEMQX 安全更完善
协议扩展MQTT 仅MQTT + CoAP + LwM2MEMQX 多协议接入
运维成本中(需管理集群)Mosquitto 运维更简单
许可证Eclipse Public LicenseApache 2.0 / 商业版均为开源友好
Mosquitto - 典型架构(适合中小规模):
┌──────────────────────────────────┐
│ 单机部署 │
│ ┌─────────┐ ┌─────────┐ │
│ │ Mosquitto│ │ Node-RED│ │
│ └─────────┘ └─────────┘ │
│ ↑ ↑ │
│ ┌────┴────┐ ┌───┴───┐ │
│ │ 设备 A │ │ 设备 B │ │
│ └─────────┘ └───────┘ │
└──────────────────────────────────┘
EMQX - 典型架构(适合大规模):
┌─────────────────────────────────────┐
│ 集群部署 │
│ ┌───────┐ ┌───────┐ ┌───────┐ │
│ │ EMQX 1 │ │EMQX 2 │ │EMQX 3 │ │
│ └───────┘ └───────┘ └───────┘ │
│ │ │ │
│ ┌────┴────┐ ┌───┴───┐ │
│ │ LB 负载均衡 │ Node-RED │
│ └─────────┘ └───────┘ │
└─────────────────────────────────────┘

A:

  • 设备 < 1000、预算有限、快速验证 → Mosquitto
  • 设备 > 10000、需要集群和HA、企业级需求 → EMQX
  • 大多数售前 PoC 场景使用 Mosquitto 即可

A:

  • Mosquitto 单机支持数千设备连接,足够覆盖大多数中小项目
  • EMQX 集群可支持百万级连接
  • 实际瓶颈通常在网络带宽而非 Broker

A: Mosquitto 支持持久化消息到磁盘,EMQX 支持更完善的持久化方案(集成数据库),即使 Broker 重启消息也不会丢失。

推荐做法:

  • 演示环境使用 Mosquitto(快速、轻量)
  • 生产环境根据规模选择
  • 始终启用密码认证
  • 配置合理的 QoS 级别
  • 设置 Topic 访问控制 (ACL)

避免做法:

  • 公网暴露无密码的 Mosquitto
  • 生产环境使用默认配置
  • 忽略 Broker 的监控和告警
  • 不合理使用 QoS 2(性能开销大)
  1. MQTT Broker 是 IoT 架构的核心消息中枢
  2. Mosquitto 轻量高效,适合中小规模部署和演示
  3. EMQX 功能丰富,适合大规模和企业级场景
  4. 开源版本均可免费使用,无许可成本
  5. 安全配置(密码 + TLS)是上线前的必备步骤