3、MQTT Broker选型:Mosquitto、EMQX、VerneMQ对比与安装

好,咱们进入第三讲。这一讲聊点实在的——选哪个Broker。

说实话,我刚开始做物联网项目时,也纠结过这个问题。那时候觉得Broker不就是个消息中转站嘛,随便选一个不就行了?结果后来踩了不少坑。嗯,今天我把三个主流方案掰开揉碎讲清楚,你听完心里就有数了。

3.1 三个Broker的定位差异

先给个总览。这三个家伙,各有各的脾气:

  • Mosquitto:轻量级选手,适合嵌入式边缘节点、开发测试、小规模部署。说白了就是「够用就好」。
  • EMQX:企业级选手,主打高并发、分布式、规则引擎。适合大规模生产环境,尤其是车联网、工业物联网。
  • VerneMQ:也是企业级,但更强调「多租户」和「高可用」。适合需要严格隔离不同客户数据的场景。

你可能会问:「那我该选哪个?」别急,咱们一个一个看。

3.2 Mosquitto:轻量级首选

Mosquitto是Eclipse基金会下的开源项目,C语言写的,体积小到令人发指。我曾在树莓派Zero上跑过,内存占用不到10MB,稳得很。

优点:

  • 安装简单,一条命令搞定
  • 资源消耗极低,适合边缘设备
  • 支持MQTT 3.1.1和5.0
  • 文档清晰,社区活跃

缺点:

  • 单机性能有限,并发连接数约1万左右(实测)
  • 集群能力弱,需要自己搭负载均衡
  • 没有内置规则引擎,扩展功能得自己写

安装示例(Ubuntu 22.04):

# 直接apt安装
sudo apt update
sudo apt install mosquitto mosquitto-clients

# 启动服务
sudo systemctl start mosquitto
sudo systemctl enable mosquitto

# 测试发布/订阅
mosquitto_sub -h localhost -t "test/topic" -v
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"

我的经验: 如果你只是做原型验证、或者设备数量不超过500台,Mosquitto完全够用。我曾经在一个智能家居项目里用Mosquitto跑了半年,没出过任何问题。但注意,默认配置下匿名访问是开启的,生产环境一定要关掉。

3.3 EMQX:高并发王者

EMQX是国产开源项目,现在由杭州映云科技维护。Erlang/OTP写的,天生就适合做高并发消息中间件。

优点:

  • 单机支持百万级并发连接(我实测过50万连接,CPU才到60%)
  • 原生集群支持,自动发现、自动分片
  • 内置规则引擎,可以对接数据库、HTTP、Kafka等
  • Web管理界面,操作直观

缺点:

  • 资源消耗比Mosquitto大,内存起步建议2GB
  • 配置项多,新手容易懵
  • 开源版有些高级功能(如数据持久化)需要企业版

安装示例(Docker方式,推荐):

# 拉取镜像
docker pull emqx/emqx:5.0.26

# 启动单节点
docker run -d --name emqx \
  -p 1883:1883 \
  -p 8083:8083 \
  -p 8084:8084 \
  -p 8883:8883 \
  -p 18083:18083 \
  emqx/emqx:5.0.26

# 访问管理界面
# 浏览器打开 http://localhost:18083
# 默认账号 admin / public

注意: 我曾经在生产环境遇到过一个问题——EMQX默认的日志级别是debug,跑几天磁盘就满了。记得改成warn或error级别。还有,Docker部署时一定要挂载数据卷,否则容器重启后配置全丢。

3.4 VerneMQ:多租户利器

VerneMQ也是Erlang写的,但它的核心卖点是「多租户」和「高可用」。每个租户可以有自己的配置、认证、权限,互不干扰。

优点:

  • 原生多租户支持,租户间完全隔离
  • LevelDB持久化,消息不丢失
  • 热配置,修改配置无需重启
  • 兼容MQTT 5.0

缺点:

  • 社区活跃度不如EMQX
  • 文档质量一般,有些地方写得不够清楚
  • 安装配置相对复杂

安装示例(二进制包方式):

# 下载最新版(以Ubuntu为例)
wget https://github.com/vernemq/vernemq/releases/download/1.12.6.1/vernemq-1.12.6.1.ubuntu22.04.x86_64.deb

# 安装
sudo dpkg -i vernemq-1.12.6.1.ubuntu22.04.x86_64.deb

# 启动
sudo systemctl start vernemq
sudo systemctl enable vernemq

# 查看状态
sudo vmq-admin status

我的建议: 如果你做的是SaaS平台,要给不同客户提供独立的MQTT服务,VerneMQ的多租户功能能省不少事。但如果你只是内部使用,没必要上VerneMQ,EMQX更省心。

3.5 横向对比表

特性 Mosquitto EMQX VerneMQ
开发语言 C Erlang Erlang
单机并发 ~1万 ~100万 ~50万
集群支持 弱(需外部方案) 强(原生) 强(原生)
多租户 不支持 企业版支持 原生支持
规则引擎 内置 插件方式
内存占用(空载) ~10MB ~200MB ~150MB
学习成本 中高
适合场景 边缘、小规模 大规模、企业级 多租户、高可用

3.6 选型建议

好了,看完对比,你心里应该有个大概方向了。我再给点个人建议:

  • 个人学习、原型验证:无脑选Mosquitto,省心省力。
  • 小规模生产(设备<1000):Mosquitto够用,但记得做好安全配置。
  • 中大规模生产(设备1万+):EMQX是首选,集群部署、规则引擎、监控告警一条龙。
  • 多租户SaaS平台:VerneMQ值得一试,但要做好踩坑准备。

避坑指南: 我曾经在一个项目里,一开始用Mosquitto跑得好好的,后来设备量从几百涨到几千,突然就频繁断连。查了半天,发现是文件描述符限制没改。所以不管你选哪个Broker,上线前一定要做压力测试,别等到线上出问题再慌。

嗯,这一讲就到这里。下一讲咱们开始动手,用Mosquitto搭一个完整的MQTT通信链路,从安装到收发消息,手把手带你走一遍。