4. MQTT Broker选型:Mosquitto、EMQX、VerneMQ对比与部署
选Broker这事儿,说实话挺头疼的。我见过不少项目,一开始随便挑一个用,结果数据量一上来就崩了。储能监控这个场景有点特殊——数据量大、实时性要求高、还得考虑断网重连。今天我就把这三款主流Broker掰开揉碎讲清楚。
4.1 三款Broker的核心定位
先给个总览,心里有个底:
| 特性 | Mosquitto | EMQX | VerneMQ |
|---|---|---|---|
| 开发语言 | C | Erlang | Erlang |
| 单机吞吐 | ~10万/秒 | ~100万/秒 | ~50万/秒 |
| 集群支持 | 弱(需第三方) | 原生强 | 原生强 |
| 插件生态 | 少 | 丰富 | 中等 |
| 运维复杂度 | 低 | 中 | 中高 |
| 典型场景 | 小规模、边缘 | 大规模、云端 | 高可用、多租户 |
4.2 Mosquitto:轻量级首选
Mosquitto是我最早接触的Broker。它轻啊,编译完才几百KB。我记得第一次在树莓派上跑,内存占用不到10MB,简直离谱。
适合什么场景?
- 边缘网关、嵌入式设备
- 节点数少于1000的小型储能站
- 原型验证、快速测试
部署示例:
# 安装
sudo apt-get install mosquitto mosquitto-clients
# 启动(带配置文件)
mosquitto -c /etc/mosquitto/mosquitto.conf
# 配置文件核心内容
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl
注意:Mosquitto默认不开启持久化。储能数据丢了可不行,记得加上
persistence true。
4.3 EMQX:企业级扛把子
EMQX是我目前在储能项目里用得最多的。为什么?因为它扛得住。我有个项目接了5万个储能柜,每秒消息量冲到80万,EMQX稳如老狗。
核心优势:
- 原生集群,节点挂了自动切换
- 内置规则引擎,可以直接写SQL处理数据
- 支持MQTT over WebSocket,前端直接订阅
- 热升级,不用重启服务
部署示例:
# Docker部署(推荐)
docker run -d --name emqx \
-p 1883:1883 \
-p 8083:8083 \
-p 8084:8084 \
-p 18083:18083 \
emqx/emqx:5.0
# 集群配置(三节点)
node {
name = "emqx1@192.168.1.10"
cookie = "mysecret"
}
cluster {
discovery_strategy = static
static {
seeds = ["emqx2@192.168.1.11", "emqx3@192.168.1.12"]
}
}
我的经验:EMQX的Dashboard在18083端口,默认账号admin/public。生产环境一定要改密码,我曾经见过有人直接用默认配置上线,结果被扫了。
4.4 VerneMQ:高可用之选
VerneMQ名气没EMQX大,但它的集群机制很有意思。它用了LevelDB做持久化,每个节点独立存储,数据通过分布式协议同步。说白了,就是每个节点都是完整的。
适合什么场景?
- 对数据一致性要求极高的场景
- 多数据中心部署
- 需要细粒度权限控制
部署示例:
# 下载解压
wget https://github.com/vernemq/vernemq/releases/download/1.12.0/vernemq-1.12.0.ubuntu-xenial_amd64.deb
dpkg -i vernemq-*.deb
# 配置集群
vmq_telegraph {
tcp {
port = 44053
nr_of_acceptors = 10
}
}
# 启动
service vernemq start
坑:VerneMQ的配置项特别多,而且有些参数调了要重启。我建议先用默认配置跑起来,再根据监控数据慢慢调。
4.5 选型决策树
别纠结,我画了个决策流程,照着走就行:
4.6 我的最终建议
说了这么多,给个实在的结论:
- 小项目、边缘端:无脑Mosquitto。省资源,好维护。
- 中型储能站(1000-10000节点):EMQX单机就够了。我有个项目用4核8G的机器,跑了5000个设备,CPU才30%。
- 大型储能集群(10000+节点):上EMQX集群。别省那点钱,数据丢了损失更大。
- 特殊场景(多数据中心、金融级一致性):考虑VerneMQ。但要做好运维准备,它比EMQX难伺候。
一句话总结:Mosquitto是自行车,EMQX是轿车,VerneMQ是越野车。别开着越野车去买菜,也别骑着自行车去越野。
部署的时候记得先压测。我习惯用 mqtt-benchmark 这个工具,模拟1000个客户端同时发消息,看看Broker扛不扛得住。压测不过关,上线就是事故。