2. MQTT Broker 选型:主流 Broker 对比与轻量级部署
选 Broker,说白了就是选你整个 MQTT 系统的「心脏」。我见过不少团队,一开始随便挑一个用,等设备量上来才发现性能扛不住,或者安全功能缺胳膊少腿,最后被迫迁移——那叫一个痛苦。所以这一节,咱们把主流的三款 Broker 掰开揉碎聊清楚。
2.1 三款主流 Broker 速览
目前社区里最活跃、生产环境用得最多的,就是 Mosquitto、EMQX 和 VerneMQ。我按自己的使用经验,给你画个像:
| 特性 | Mosquitto | EMQX | VerneMQ |
|---|---|---|---|
| 开发语言 | C | Erlang/OTP | Erlang/OTP |
| 定位 | 轻量、嵌入式 | 高可用、大规模 | 高并发、多租户 |
| 单机吞吐 | ~10万 msg/s | ~500万 msg/s | ~200万 msg/s |
| 集群能力 | 弱(需第三方) | 原生强 | 原生强 |
| 安全特性 | TLS + ACL 文件 | TLS + Auth + RBAC | TLS + Auth + 插件 |
| 资源占用 | 极低(~2MB) | 中等(~50MB) | 中等(~40MB) |
| 学习曲线 | 低 | 中 | 中高 |
2.2 选型考量因素
选 Broker 不是看谁功能多就选谁。我总结了一套「四维评估法」,你照着这个框架走,基本不会踩坑。
2.2.1 性能与规模
先问自己三个问题:
- 设备量级: 是几百台,还是几十万台?
- 消息频率: 每秒多少条?每条多大?
- QoS 等级: 是否大量使用 QoS 1/2?
我在一个智慧农业项目里,初期用 Mosquitto 跑了 500 台设备,一切正常。后来扩展到 5000 台,QoS 1 消息一多,CPU 直接飙到 90%。换到 EMQX 后,同样硬件,CPU 只用了 15%。
2.2.2 安全能力
安全不是「有就行」,而是「够用且好用」。重点关注:
- TLS 支持: 是否支持双向认证?
- 认证机制: 用户名密码、JWT、X.509 证书?
- 授权粒度: 能否按 Topic 通配符做 ACL?
- 审计日志: 能否记录谁在什么时候发布了什么?
2.2.3 运维与可观测性
Broker 跑起来之后,你怎么知道它健不健康?
- 监控指标: 连接数、消息吞吐、订阅数、丢包率。
- 日志管理: 是否支持结构化日志?能否接入 ELK?
- 热更新: 修改配置是否需要重启?
EMQX 在这方面做得最好,自带 Dashboard,Prometheus 指标直接暴露。Mosquitto 就比较原始了,得自己写脚本解析日志。
2.2.4 社区与生态
选一个活跃的社区,等于给自己买了份「保险」。遇到问题搜不到答案,那才叫绝望。
- Mosquitto: Eclipse 基金会,文档全,但更新慢。
- EMQX: 国内团队主导,中文文档好,社区响应快。
- VerneMQ: 欧洲团队,技术深度高,但中文资料少。
2.3 轻量级部署方案
很多初学者一上来就想搭集群,其实没必要。我建议你从「最小可行部署」开始,跑通了再加东西。
2.3.1 方案一:单机 Mosquitto(适合开发/测试)
这是最轻量的方案,一个二进制文件搞定。
# 安装(Ubuntu)
sudo apt-get install mosquitto mosquitto-clients
# 启动
mosquitto -c /etc/mosquitto/mosquitto.conf -d
# 测试
mosquitto_sub -h localhost -t "test/topic" -v
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"
嗯,这里要注意:默认配置是匿名访问、无加密。千万别直接用到生产环境。
2.3.2 方案二:Docker 部署 EMQX(适合生产单机)
EMQX 官方 Docker 镜像非常成熟,我习惯用这个做快速验证。
# 拉取并启动
docker run -d --name emqx \
-p 1883:1883 \
-p 8083:8083 \
-p 8084:8084 \
-p 8883:8883 \
-p 18083:18083 \
emqx/emqx:latest
# 访问 Dashboard
# http://localhost:18083 (默认 admin/public)
端口说明:
- 1883: MQTT 明文端口
- 8883: MQTT over TLS
- 8083: WebSocket 端口
- 8084: WebSocket over TLS
- 18083: Dashboard 管理界面
2.3.3 方案三:树莓派 + Mosquitto(边缘部署)
如果你需要在边缘网关跑 Broker,树莓派 Zero 2W 就能带起来。
# 树莓派上安装
sudo apt-get install mosquitto
# 限制内存占用(编辑配置文件)
echo "memory_limit 64" | sudo tee -a /etc/mosquitto/mosquitto.conf
# 启动
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
2.4 选型决策流程图
下面这张图,是我自己总结的选型决策路径。你跟着走一遍,基本能锁定目标。
2.5 我的最终建议
如果你还在犹豫,我直接给你一个「无脑选」方案:
- 学习阶段: 装 Mosquitto,5 分钟跑起来,先理解 MQTT 协议本身。
- 生产环境: 直接上 EMQX,Docker 一行命令部署,安全功能开箱即用。
- 边缘/嵌入式: Mosquitto 编译到 ARM 平台,内存占用不到 5MB。
记住一句话: Broker 选型没有银弹。最贵的方案不一定最好,最适合你当前场景的,才是对的。而且,选型不是一锤子买卖——随着业务增长,随时可以迁移升级。