2024 最全面的开源 MQTT Broker 对比
引言
MQTT (Message Queue Telemetry Transport) 最初是作为一种轻量级发布/订阅消息传输而设计的,现在已成为物联网(IoT)消息传输协议的事实标准,而 MQTT Broker 是连接物联网设备并实现设备间消息传输的关键组件。
正如十多年前 a16z 所说:"Software is eating the world" 。开源软件正在吞噬软件。当前,市面上超过 20 个开源 MQTT Broker 项目,这使得软件架构师和开发人员的选择过程充满挑战。
本文将探讨 2024 年最热门的开源 MQTT Broker,并对它们进行深入比较,帮助您选择最适合自己需求的一款。
评价标准:社区和受欢迎度
要进行全面详尽的比较,必须综合考虑以下评估标准:
- 社区规模:通过 GitHub Star 数、贡献者和 issue 的数量进行评估。
- 受欢迎程度:通过研究用户群、下载量和 Docker 拉取数来评估。
- 项目活跃度:通过 GitHub 提交、PR 和发布的频率进行评估,尤其是过去 12 个月内的相关数据。
根据上述标准,我们选择了在开源社区中影响力最大的四个开源 MQTT Broker:
- EMQX:GitHub 上 Star 数最高的 MQTT Broker,有 12.6k 个 Star。
- Mosquitto:Star 数排名第二,但使用最为广泛。
- NanoMQ:目前最新、最活跃的 MQTT Broker 之一。
- VerneMQ:虽然在 Github 上的开发并不活跃,但 Star 数排名第三。
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
GitHub Project | EMQX GitHub | Mosquitto GitHub | NanoMQ GitHub | VerneMQ GitHub |
Project Created | 2012 | 2009 | 2020 | 2014 |
License | Apache Version 2.0 | EPL/EDL License | MIT License | Apache Version 2.0 |
Programming Language | Erlang | C/C++ | C | Erlang |
Latest Release | v5.3.2 (Dec. 2023) | 2.0.18 (Sep 2023) | v0.20.8 (Nov 2023) | v1.13.0 (Jun 2023) |
GitHub Stars | 12.6k | 8k | 1.2k | 3.1k |
GitHub Commits | 19k+ | 2900+ | 3000+ | 2400+ |
GitHub Commits (Last 12 Months) | 6500+ | 70+ | 1300+ | 80+ |
GitHub Issues | 3700+ | 2300+ | 400+ | 1400+ |
GitHub Releases | 330+ | 60+ | 80+ | 40+ |
GitHub PRs | 7700+ | 600+ | 1000+ | 700+ |
GitHub Contributors | 110+ | 130+ | 20+ | 50+ |
主流开源 MQTT Broker 概览
EMQX
EMQX 是业界领先的 MQTT Broker,深受开发者喜爱,目前在 GitHub 上已获得超过 12k 个 Star。EMQX 项目始于 2012 年,遵循 Apache 2.0 开源协议。它基于 Erlang/OTP 开发,这是一种能够构建大规模可扩展软实时系统的编程语言。
EMQX 是全球最具扩展性的 MQTT Broker,支持 MQTT 5.0、MQTT-SN 和 MQTT over QUIC 等协议和其他先进功能。它采用无主集群架构,实现了高可用性和水平扩展性。自 5.0 版本开始,EMQX 能够在一个由 23 个节点组成的集群中创建高达 1 亿个并发 MQTT 连接。
EMQX 是 MQTT Broker 的领导者,提供了丰富的企业级功能、数据集成、云托管服务,以及来自 EMQ 团队的专业支持。多年来,EMQX 凭借其卓越的性能、可靠性和可扩展性,赢得了众多大型企业、创业公司和个人开发者的青睐。EMQX 被广泛应用于各个行业的重要业务领域,如物联网、工业物联网、网联汽车、制造业和电信行业等。
GitHub:https://github.com/emqx/emqx
优点:
- 支持大规模集群部署
- 高可用性
- 横向可扩展性
- 高性能和低延迟
- 丰富的企业功能
- 率先引入 MQTT over QUIC
缺点:
- 配置较为复杂
- 插件生态有限,难以开发扩展
- 理解日志具有一定难度
Mosquitto
Mosquitto 项目由 Roger Light 于 2009 年创立,后来捐赠给 Eclipse 基金会,遵循 Eclipse公共许可证(EPL/EDL 许可证)协议。截至 2023 年 12 月,它是部署最广泛的开源 MQTT Broker,拥有庞大的社区,在 GitHub 获得了超过 8k 个 Star。
Mosquitto 由 C/C++ 编写,采用单线程结构。它支持 MQTT 协议的 5.0、3.1.1 和 3.1 版本,并支持 SSL/TLS 和 WebSocket。由于其轻量级设计,Mosquitto 非常适合部署在嵌入式设备或资源受限的服务器上。
Mosquitto 因其仅占用约 200KB 的启动内存而广受赞誉。但是,它并不支持多线程或集群功能。Mosquitto 可在多个平台上运行,包括 Linux、Windows 和 macOS。
GitHub:https://github.com/eclipse/mosquitto
优点:
- 安装和使用方便
- 支持 MQTT 5.0 协议
- 轻量级,资源占用少
- 拥有活跃的开源社区
缺点:
- 单线程架构
- 生产环境中可扩展性有限(<100k)
- 不支持集群
- 缺少企业级功能
- 有限的云原生支持
NanoMQ
NanoMQ 是一个于 2020 年发布的开源项目,是专为物联网边缘计算场景打造的轻量快捷的 MQTT 消息传输 Broker。
NanoMQ 由纯 C 语言编写,基于 NNG 的异步 I/O 和多线程 Actor 模型构建。它完全支持 MQTT 3.1.1 和 MQTT 5.0,并率先引入 MQTT over QUIC。
NanoMQ 具有轻量高效的特点,适合多种边缘计算平台。它具有高度的兼容性和可移植性,仅依赖于原生的 POSIX API。这意味着它可以在任何 POSIX 兼容的平台上轻松部署,并且可以在包括 x86_64、ARM、MIPS 和 RISC-V 在内的多种 CPU 架构上顺畅运行。
GitHub:https://github.com/nanomq/nanomq
优点:
- 设计轻巧
- 多线程和异步 I/O
- 高度便携
- 启动占用空间小
- 部署方便
- 能够与无代理协议桥接
缺点:
- 不支持集群
- 作为早期项目,社区和用户群规模较小
- 文档和教程不多
- 缺少企业级功能(如数据集成)
VerneMQ
VerneMQ 项目于 2014 年启动,最初由 Erlio GmbH 开发。该项目采用 Apache Version 2.0 许可证。它支持 MQTT 协议的 3.1、3.1.1 和 5.0 版本。作为第二个用 Erlang/OTP 开发的 Broker,其部分代码参考了 EMQX 项目。
在架构设计方面,VerneMQ 致力于处理百万级的并发连接和消息,实现低延迟和高吞吐量。它支持在 LevelDB 中存储 MQTT 消息,并使用基于 Plumtree 库的集群架构,该库实现了 Epidemic Broadcast Trees 算法。
然而,尽管 Plumtree 集群架构从理论上看很完美,但其可行性尚未得到证明。VerneMQ 团队和社区花费了多年时间尝试解决系统存在的问题,如网络分裂、数据不一致和崩溃恢复等,但是取得的成果有限。
目前,该项目已不再积极的开发和维护,在过去的一年中只有大约 50 次提交。
GitHub:https://github.com/vernemq/vernemq
优点:
- 保证高可用性
- 具有横向扩展性
- 支持消息持久化
缺点:
- 未经验证的集群架构
- 文档不足
- 企业级功能有限
- 不再积极开发
可扩展性、性能和可靠性
在深入比较这些 MQTT Broker 的特性和功能之前,我们先来看一下它们的可扩展性、可用性、性能、延迟和可靠性。
- 可扩展性:能否横向扩展以处理百万级并发 MQTT 连接?
- 可用性: 是否支持关键业务应用的高可用集群?
- 性能: 每秒能路由和交付多少 QoS/0/1/2 MQTT 消息?
- 延迟: 能以多快的速度将 MQTT 消息从一个 MQTT 客户端分发和传递到另一个 MQTT 客户端?
- 可靠性: 是否支持 MQTT 消息持久性和无数据丢失的交付?
以下是这四个 MQTT Broker 的对比分析:
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
Scalability | ||||
Multi-threading | Yes | No | Yes | Yes |
Asynchronous I/O | Yes | Yes | Yes | Yes |
Clustering | Yes (over 20 nodes cluster) | No | No | Yes |
MQTT connections per node | 5M | 100k | 100k | 1M |
MQTT connections per cluster | 100M | N/A | N/A | ? |
Availability | ||||
Masterless Clustering Architecture | Yes | No | No | Yes |
Elastic and Resilient scaling at runtime | Yes | No | No | Yes |
Auto Clustering | Yes | No | No | No |
Overload Protection | Yes | No | No | Yes |
Fault tolerance | Yes | No | No | ? |
Performance (per node) | ||||
QoS0 msgs/sec | 2 million | 120k | 500k | ? |
QoS1 msgs/sec | 800k | 80k | 400k | ? |
QoS2 msgs/sec | 200k | 40k | 200k | ? |
Latency | ||||
Latency (varies on different scenarios) | Single-digit millisecond latency at scale | Up to seconds latency in some scenarios | Less than 10 milliseconds in most scenarios | Up to seconds latency in some scenarios |
Reliability | ||||
Message Persistence | In RocksDB and External Databases | In Files | In SQLite | In LevelDB |
Zero Downtime/Hot Upgrade | Yes | No | No | No |
Hot Patch | Yes | No | No | No |
*? 表示我们没有找到可以作为该讨论项证据支撑的公开可用资料。*
MQTT 协议与连接性
本文中讨论的这几个 MQTT Broker 都完全支持 MQTT 3.1.1 和 5.0 版本,以及 MQTT over WebSocket 和 SSL/TLS 加密的。此外,EMQX 还支持 MQTT-SN、CoAP 和 LwM2M 协议网关。NanoMQ 支持无代理模式,可与 DDS、ZeroMQ 和 Nanomsg 协同工作。
EMQX 和 NanoMQ 致力于推进 MQTT 标准。它们创新性地实现了下一代 MQTT 协议标准——MQTT over QUIC,进一步优化了物联网通信。
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
MQTT 3.1/3.1.1 | Yes | Yes | Yes | Yes |
MQTT 5.0 | Yes | Yes | Yes | Yes |
MQTT-SN 1.2 | Yes | No | No | No |
MQTT over TCP | Yes | Yes | Yes | Yes |
MQTT over SSL/TLS | Yes | Yes | Yes | Yes |
MQTT over WebSocket | Yes | Yes | Yes | Yes |
MQTT over QUIC | Yes | No | Yes | No |
MQTT Bridging | Yes | Yes | Yes | Yes |
Shared Subscription | Yes | Yes | Yes | Yes |
Retained Message | Yes | Yes | Yes | Yes |
Will Message | Yes | Yes | Yes | Yes |
MQTT Request/Response | Yes | Yes | Yes | Yes |
LB (Proxy Protocol) | Yes | No | No | Yes |
Multi-protocol Gateway | Yes | No | No | No |
CoAP | Yes | No | No | No |
LwM2M | Yes | No | No | No |
DDS Gateway | No | No | Yes | No |
ZeroMQ Gateway | No | No | Yes | No |
Nanomsg/NNG | No | No | Yes | No |
安全性与认证鉴权
对于连接物联网设备以及使用 MQTT Broker 在连接设备之间交换的数据而言,安全性至关重要。本文中对比的所有 Broker 都支持基于 TLS/SSL 的安全连接以及身份验证和授权机制,例如用户名 / 密码、JWT、X.509 证书和访问控制列表。
此外,EMQX 还提供高级安全功能,例如与外部数据库集成、OCSP Stapling、细粒度访问控制策略、抖动检测以及对 OAuth 2.0 授权的支持。
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
TLS/SSL | Yes | Yes | Yes | Yes |
OCSP Stapling | Yes | Yes | No | No |
Username/Password Authentication | Yes | Yes | Yes | Yes |
X.509 Certificates Authentication | Yes | Yes | Yes | Yes |
JWT Authentication | Yes | Yes (via auth plugin) | No | ? |
LDAP Authentication | Yes | Yes (via auth plugin) | No | Yes (via plugin) |
Fine-grained Access Control | Yes | Yes | Yes | Yes |
Authorization using Databases | Yes (built-in) | Yes (via auth plugins) | No | Yes (via auth plugins) |
Flapping Detection | Yes | No | No | No |
Audit Logs | Yes | No | No | No |
数据集成
这四个 Broker 都支持通过 WebHook 与外部服务集成。作为轻量级 Broker,Mosquitto 和 NanoMQ 不支持数据集成。用户可以编写代码对来自 Mosquitto 的 MQTT 消息进行订阅并发送到外部数据库或云服务中。
EMQX 提供内置的基于 SQL 的规则引擎,用户可以在 Broker 内实时提取、过滤、丰富和转换 MQTT 消息。 EMQX 企业版提供开箱即用的数据桥接功能,实现与 Kafka、数据库和云服务无缝集成。
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
WebHook | Yes | Yes | Yes | Yes |
Rule Engine | Yes | No | Yes (limited) | No |
Message Codec | Yes | No | No | No |
Schema Registry | Yes | No | No | No |
Data Bridge | Yes | No | No | No |
Confluent/Kafka | Yes (Enterprise Edition) | No | No | No |
SAP Event Mesh | Yes (Enterprise Edition) | No | No | No |
Apache Pulsar | Yes (Enterprise Edition) | No | No | No |
RabbitMQ | Yes (Enterprise Edition) | No | No | No |
MySQL | Yes (Enterprise Edition) | No | No | No |
PostgreSQL | Yes (Enterprise Edition) | No | No | No |
SQL Server | Yes (Enterprise Edition) | No | No | No |
MongoDB | Yes (Enterprise Edition) | No | No | No |
AWS DynamoDB | Yes (Enterprise Edition) | No | No | No |
ClickHouse | Yes (Enterprise Edition) | No | No | No |
InfluxDB | Yes (Enterprise Edition) | No | No | No |
TimeScaleDB | Yes (Enterprise Edition) | No | No | No |
Oracle | Yes (Enterprise Edition) | No | No | No |
Redis | Yes (Enterprise Edition) | No | No | No |
Cassandra | Yes (Enterprise Edition) | No | No | No |
可操作性、可观测性与兼容性
这四个 MQTT Broker 都是用户友好的,并配备了必要的日志记录和调试功能,可以有效地监控其状态并解决问题。它们可以在各种操作系统和公共云平台上运行。EMQX 对 Kubernetes Operator 和 Terraform 都有出色的支持。
此外,EMQX 通过 HTTP API 和 Dashboard 提供丰富的可视化监控能力,让监控和管理变得更加简单。EMQX 还支持与 Prometheus、OpenTelemetry、Grafana 集成,使运维团队能够轻松使用第三方监控平台。
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
Dashboard | Yes | No | No | No |
Configuration | HOCON Format | Key-value Format | HOCON Format | Key-value Format |
Config Hot update | Yes | No | Yes (Limited) | No |
REST API | Yes | Yes | Yes | Yes |
CLI | Yes | Yes | Yes | Yes |
Remote Console | Yes | No | No | Yes |
Metrics | Yes | Yes | Yes | Yes |
Grafana Integration | Yes | Yes | Yes | Yes |
Prometheus | Yes | Yes | Yes | Yes |
OpenTelemetry | Yes | No | No | No |
Docker | Yes | Yes | Yes | Yes |
Kubernetes Operator | Yes (EMQX Kubernetes Operator) | No | No | No |
Terraform | Yes (EMQX Terraform) | No | No | No |
汇总对比表
我们在下表中总结了对这几个主流开源 MQTT Broker 的总体评价:
EMQX | Mosquitto | NanoMQ | VerneMQ | |
---|---|---|---|---|
Scalability | Excellent | Moderate | Good | Good |
Availability | Excellent | Moderate | Moderate | Good |
Performance | Excellent | Excellent | Excellent | Good |
Latency | Excellent | Good | Excellent | Good |
Reliability | Good | Good | Good | Moderate |
Security | Excellent | Excellent | Good | Good |
Authenticaton & Authorization | Excellent | Good | Moderate | Good |
Connectivity | Excellent | Good | Good | Good |
Integration | Excellent | Moderate | Moderate | Moderate |
Operability | Good | Excellent | Good | Moderate |
Observability | Excellent | Moderate | Moderate | Good |
Compatibility | Good | Excellent | Excellent | Good |
Ease of Use | Good | Excellent | Good | Good |
Community Support | Excellent | Excellent | Good | Moderate |
结语
在过去的十年中,开源 MQTT Broker 引领了 MQTT 技术创新,在推进 MQTT 消息协议功能、可扩展性和互操作性提升方面发挥了重要作用。这使 MQTT 在如今得到了广泛采用。
选择 MQTT Broker 取决于多种因素,例如连接设备的数量、消息吞吐量和集成要求。通过本文的对比,我们可看出,EMQX 是一个高度可扩展的企业级 MQTT Broker,适用于云上的大规模关键任务部署;Mosquitto 和 NanoMQ 速度快、量级轻,更适合部署在资源有限的嵌入式硬件、工业网关和物联网边缘服务器上。
随着物联网的快速发展,预计到 2030 年,全球连接设备的数量将超过 1000 亿。MQTT 作为物联网的神经系统也将因此变得更加不可或缺。EMQ 正致力于 MQTT over QUIC、MQTT Serverless、MQTT 统一命名空间等多项领先的 MQTT 技术革新。欢迎查看我们的博客了解更多信息: