在物联网(IoT)与边缘计算快速发展的今天,传统MQTT服务器在资源受限的边缘设备(如工业网关、路由、智能摄像头、嵌入式终端)上面临双重困境:要么太重(占用高、启动慢),要么太弱(单线程、性能差、不支持多核)。
NanoMQ的出现,正是为了解决这一痛点——它是一款纯C开发、全异步多线程、超轻量、专为边缘场景设计的开源MQTT Broker,在保持极小体积的同时,提供接近云端Broker的性能表现。
介绍
NanoMQ是EMQ团队于2021年初推出的开源边缘MQTT消息服务器,基于NNG异步I/O框架与多线程Actor模型构建,完全兼容MQTT 3.1.1/5.0标准。
- 定位:边缘计算首选MQTT Broker,主打轻量、高效、跨平台、多核优化。
- 开发语言:纯C语言,无虚拟机/运行时依赖,极致精简。
- 核心目标:在ARM/x86/RISC-V等边缘硬件上,以最低资源占用实现最高消息吞吐与最低延迟。
- 开源协议:MIT License,完全免费商用。
优势
1. 超轻量:200KB启动,边缘设备无压力
- 最小功能集启动内存 < 200KB,完整功能也仅2MB左右。
- 单二进制文件,无依赖,解压即用,嵌入式/路由/网关友好。
- 对比:EMQX启动约50MB,Mosquitto单线程约1MB。
2. 全异步+多线程:真正榨干多核CPU
- 基于NNG异步I/O,内建Actor模型,无锁并行。
- 完美支持SMP多核,负载自动均衡到所有CPU核心。
- 性能:多核下比Mosquitto快2–10倍,单节点可达百万级消息/秒。
3. 完整MQTT 5.0支持:功能不缩水
- 完整支持MQTT 5.0全部特性(共享订阅、消息过期、主题别名、用户属性等)。
- 兼容MQTT 3.1.1,无缝对接现有设备与SDK。
- 率先支持MQTT over QUIC,弱网下更稳定、低延迟。
4. 跨平台:一碗代码跑遍所有边缘
- 纯POSIX API,可移植到Linux/Windows/macOS/FreeBSD。
- 支持x86_64/ARMv7/ARMv8/RISC-V/MIPS等几乎所有嵌入式架构。
- 从OpenWrt路由到工业工控机,一键部署。
5. 边缘增强特性:云边协同必备
- MQTT桥接:一键对接云端Broker(EMQX/阿里云/华为云等),支持断网续传、消息持久化。
- 规则引擎:SQL语法,边缘数据过滤、转换、本地处理。
- 消息持久化:掉电不丢关键数据,网络恢复自动重传。
- 与eKuiper无缝集成:边缘流式计算,实时分析传感器数据。
缺点
- 无原生集群:仅支持桥接/多实例,不支持分布式会话同步。
- 社区与文档:比EMQX/Mosquitto小,生态仍在成长。
- 企业级功能:无内置SQL/大数据集成(需配合eKuiper)。
性能
单节点基准
标准边缘服务器:4核ARM/8GB
- 最大并发连接:10万–100万(依配置与内存)。
- 消息吞吐(QoS0):10万–100万条/秒。
- 端到端延迟:亚毫秒级(p99 < 3ms)。
- CPU占用:同等吞吐下,仅为Mosquitto的1/3–1/5。
- 内存占用:10万连接约50–100MB,远低于同类产品。
与主流MQTT服务器对比
| 特性 | NanoMQ | Mosquitto | EMQX(开源) | VerneMQ |
|---|---|---|---|---|
| 开发语言 | C | C | Erlang | Erlang |
| 启动内存 | <200KB |
~1MB | ~50MB | ~20MB |
| 线程模型 | 多线程+异步 | 单线程 | 多线程 | 多线程 |
| 多核优化 | ✅ 极佳 | ❌ 无 | ✅ 好 | ✅ 好 |
| 单节点连接 | 10万–100万 | ~10万 | 100万+ | ~100万 |
| 原生集群 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| MQTT 5.0 | ✅ 完整 | ✅ 基础 | ✅ 完整 | ✅ 完整 |
| 边缘适配 | ★★★★★ | ★★★☆☆ | ★★☆☆☆ | ★★★☆☆ |
| 最佳场景 | 边缘/网关/嵌入式 | 轻量小项目 | 大规模云端 | 中等规模集群 |
适用场景
- 工业物联网(IIoT)
- 工业网关、PLC、传感器数据采集、产线监控。
- 高实时、低延迟、弱网稳定、资源有限。
- 智能硬件与智能家居
- 路由器、摄像头、智能家电、边缘盒子。
- 轻量、低功耗、7×24小时稳定。
- 车联网与智能座舱
- T-BOX、车载网关、车云数据同步。
- 能源与光伏/风电
- 逆变器、汇流箱、边缘数据采集与上云。
- 智慧城市
- 路灯、环境监测、边缘节点消息路由。
部署
下载
https://github.com/nanomq/nanomq/releases
windows
解压缩后,在根目录创建下面文件:
启动.bat
内容如下:
.\bin\nanomq start --conf config\nanomq.conf
这里使用 config\nanomq.conf 配置文件
创建临时目录
在当前盘符的根目录下创建 tmp 临时目录
启动
双击 启动.bat 启动
Docker一键启动(推荐)
# 拉取并运行,暴露1883(MQTT)/8083(WS)/8883(SSL)
docker run -d --name nanomq \
-p 1883:1883 \
-p 8083:8083 \
-p 8883:8883 \
emqx/nanomq:latest
Linux安装(Ubuntu/Debian)
# 一键脚本安装
curl -fsSL https://repos.emqx.io/install-nanomq.sh | sudo bash
sudo apt install nanomq
# 启动
nanomq start
# 查看状态
nanomq status
关键配置
详见链接
# MQTT监听
listeners.tcp {
bind = "0.0.0.0:1883"
}
# WebSocket
listeners.ws {
bind = "0.0.0.0:8083"
}
# 桥接云端示例
bridges.mqtt.cloud {
server = "mqtt-tcp://broker.emqx.io:1883"
forwards = ["sensor/#"] # 边缘数据上云
subscription = ["cmd/#"] # 云端命令下发
}
端口
需要访问 MQTT服务器端口:1883
WEB API端口:8081
使用
测试发布/订阅
# 订阅主题(终端1)
nanomq_cli sub -t "sensor/temp" -h 127.0.0.1 -p 1883
# 发布消息(终端2)
nanomq_cli pub -t "sensor/temp" -m "25.5°C" -h 127.0.0.1 -p 1883
选型建议
- ✅ 选NanoMQ:边缘/嵌入式、多核CPU、低资源、高吞吐、云边桥接。
- ✅ 选Mosquitto:极简单核设备、最小体积、无需多核。
- ✅ 选EMQX:云端大规模、集群、高可用、百万+连接。
总结
NanoMQ重新定义了边缘MQTT服务器的标准:轻到200KB、强到多核百万TPS、全兼容MQTT 5.0、跨全平台。它既解决了Mosquitto单线程性能瓶颈,又避免了EMQX在边缘的资源冗余,是工业网关、智能硬件、车联网、能源物联网等边缘场景的最优开源选择。