跳转到内容

Broker 选型对比

本节对比两款最主流的 MQTT Broker——Eclipse Mosquitto 和 EMQX,帮助售前工程师在客户咨询时提供专业的选型建议。学习完成后,您将能够:

  • 理解 Mosquitto 和 EMQX 的核心差异
  • 根据不同场景推荐合适的 Broker
  • 回答客户关于 Broker 选型的常见问题
  • 掌握各 Broker 的部署和配置要点

在开始本节之前,请确保:

  • 理解 MQTT Broker 的角色和功能
  • 了解 Docker 基础操作
  • 有基本的 Linux 命令行经验
维度Eclipse MosquittoEMQX
开发者Eclipse 基金会杭州映云科技 (EMQ)
首次发布2010 年2017 年
许可证EPL-2.0 / EDLApache 2.0 (开源版)
开发语言CErlang/OTP
定位轻量级嵌入式 Broker高性能分布式 MQTT 平台
社区活跃度成熟稳定快速增长
商业支持无官方商业版有企业版和商业支持
你的需求是什么?
├── 设备 < 100,不需要集群
│ └── Mosquitto ✅ (最简单、最轻量)
├── 设备 100-1000,需要管理界面
│ ├── Mosquitto + 第三方工具
│ └── EMQX (内置 Dashboard) ✅
├── 设备 1000+,需要高可用
│ └── EMQX 集群 ✅
├── 需要规则引擎/数据桥接
│ └── EMQX ✅
└── 嵌入式/边缘/资源受限
└── Mosquitto ✅ (内存占用 < 5MB)
指标Mosquitto 2.xEMQX 5.x说明
最大并发连接~10,000~1,000,000+EMQX 优势在大规模场景
消息吞吐量~50,000 msg/s~1,000,000+ msg/s单节点差异显著
消息延迟< 1ms (低负载)< 1ms (低负载)低负载下差异不大
内存占用~5-15 MB~100-500 MBMosquitto 更轻量
CPU 占用Mosquitto 资源效率更高
启动时间< 1 秒~5-10 秒Mosquitto 启动极快
功能MosquittoEMQX说明
基础 MQTT (v3.1.1/5.0)都支持
QoS 0/1/2都支持完全实现
保留消息都支持
遗嘱消息都支持
WebSocket 支持都支持
TLS/SSL都支持
内置 Web DashboardEMQX 开箱即用
集群能力桥接模式原生分布式关键差异点
规则引擎EMQX 独有
数据桥接EMQX 独有
HTTP API 管理EMQX 有 REST API
认证授权(内置)密码文件多种插件EMQX 更丰富
插件系统有限丰富EMQX 可扩展性强
共享订阅EMQX 支持负载均衡

Mosquitto Docker 部署

# docker-compose.yml (Mosquitto)
version: '3'
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
restart: unless-stopped

EMQX Docker 部署

# docker-compose.yml (EMQX)
version: '3'
services:
emqx:
image: emqx/emqx:5.0
container_name: emqx
ports:
- "1883:1883" # MQTT TCP
- "8083:8083" # MQTT WS
- "8084:8084" # MQTT WSS
- "18083:18083" # Dashboard
volumes:
- ./emqx/data:/opt/emqx/data
- ./emqx/log:/opt/emqx/log
restart: unless-stopped
environment:
- EMQX_DASHBOARD__DEFAULT_USER__LOGIN=admin
- EMQX_DASHBOARD__DEFAULT_USER__PASSWORD=public

EMQX 内置 Web 管理界面(默认地址:http://localhost:18083):

Dashboard 功能:
├── 监控概览:连接数、消息数、吞吐量实时图表
├── 客户端管理:查看所有连接的客户端
├── Topic 管理:查看所有 Topic 和消息流
├── 订阅管理:查看和管理订阅关系
├── 告警规则:设置触发条件和通知方式
└── 插件管理:启用/禁用扩展功能

EMQX 的规则引擎可以直接在 Broker 中处理数据:

-- 创建规则:将温度超过 30°C 的数据写入 HTTP API
CREATE RULE temp_alert
AS
SELECT
payload.temperature as temp,
clientid as device_id,
now_timestamp as ts
FROM
"factory/+/temperature"
WHERE
payload.temperature > 30
DO
web_hook('http://alert-api.factory.com/alarm')
WITH(retry_count=3);

EMQX 支持直接桥接数据到外部系统,无需额外开发:

Terminal window
# 配置 MQTT → InfluxDB 桥接
# 通过 Dashboard 或配置文件
bridges.mqtt {
server = "influxdb:8086"
enable = true
}

Mosquitto 非常适合边缘节点和资源受限环境:

Mosquitto 在 Raspberry Pi Zero 上的表现:
- 内存占用:~3 MB
- CPU 占用:< 1%
- 磁盘占用:< 2 MB (二进制文件)
- 支持 100+ 并发连接
配置 Mosquitto 仅需一个配置文件:
1. 安装(或拉取 Docker 镜像)
2. 配置 mosquitto.conf(通常 5-10 行)
3. 启动服务
4. 完成 ✔
无数据库依赖 ❌
无运行时依赖 ❌
无需安装面板 ❌
单一二进制文件 ✅

在某些场景下,可以组合使用两种 Broker:

┌──────────────────────────────────────────────────────┐
│ 云平台 (EMQX 集群) │
│ 管理 10000+ 设备 │
├──────────────────────────────────────────────────────┤
│ ↑ │
│ MQTT Bridge (TLS) │
│ ↑ │
├──────────┬──────────┬──┴──┬──────────┬───────────────┤
│ 工厂 A │ 工厂 B │ │ 工厂 C │ 工厂 D │
│ Mosquitto│ Mosquitto│ ... │Mosquitto│ Mosquitto │
│ (边缘节点)│ (边缘节点)│ │(边缘节点)│ (边缘节点) │
└──────────┴──────────┘ └──────────┴───────────────┘

优势

  • 边缘节点使用轻量 Mosquitto,降低硬件要求
  • 云平台使用 EMQX 集群,实现集中管理
  • 网络断开时边缘节点独立运行
  • 网络恢复后数据自动同步到云端

Q1: 为什么不用免费的 Mosquitto 而要选择 EMQX?

Section titled “Q1: 为什么不用免费的 Mosquitto 而要选择 EMQX?”

A: 这取决于您的需求规模。如果:

  • 设备少于 100 台,不需要集群——Mosquitto 完全够用
  • 超过 100 台设备或需要高可用——建议 EMQX
  • 需要数据清洗、桥接等高级功能——EMQX 内置规则引擎

Q2: EMQX 企业版比开源版多什么?

Section titled “Q2: EMQX 企业版比开源版多什么?”

A: 企业版增加:

  • 7×24 小时商业支持
  • 监控和告警系统
  • LDAP/AD 集成认证
  • Kafka/Pulsar 等高级桥接
  • 审计日志和合规报告

Q3: 从 Mosquitto 迁移到 EMQX 复杂吗?

Section titled “Q3: 从 Mosquitto 迁移到 EMQX 复杂吗?”

A: 非常简单。EMQX 兼容标准 MQTT 协议,只需要:

  1. 修改客户端连接地址
  2. 导入 ACL 配置
  3. 测试核心功能

通常 1-2 小时即可完成迁移。

本节要点总结:

  1. Mosquitto 优势:轻量(~5MB 内存)、简单、适合中小规模部署
  2. EMQX 优势:高并发(百万级连接)、集群能力、内置 Dashboard 和规则引擎
  3. 选型建议:< 100 设备用 Mosquitto,> 1000 设备用 EMQX,中间范围根据需求
  4. 混合架构:边缘 Mosquitto + 云端 EMQX,兼顾轻量和高性能
  5. 核心差异:Mosquitto 是轻量 Broker,EMQX 是分布式 MQTT 平台