白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

2024 最全面的开源 MQTT Broker 对比

Fan Wang
2023-12-20
2024 最全面的开源 MQTT Broker 对比

引言

MQTT (Message Queue Telemetry Transport) 最初是作为一种轻量级发布/订阅消息传输而设计的,现在已成为物联网(IoT)消息传输协议的事实标准,而 MQTT Broker 是连接物联网设备并实现设备间消息传输的关键组件。

publish/subscribe

正如十多年前 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 连接。

MQTT Cluster

EMQX 是 MQTT Broker 的领导者,提供了丰富的企业级功能、数据集成、云托管服务,以及来自 EMQ 团队的专业支持。多年来,EMQX 凭借其卓越的性能、可靠性和可扩展性,赢得了众多大型企业、创业公司和个人开发者的青睐。EMQX 被广泛应用于各个行业的重要业务领域,如物联网、工业物联网、网联汽车、制造业和电信行业等。

官网:https://www.emqx.io/

GitHub:https://github.com/emqx/emqx

优点:

  • 支持大规模集群部署
  • 高可用性
  • 横向可扩展性
  • 高性能和低延迟
  • 丰富的企业功能
  • 率先引入 MQTT over QUIC

缺点:

  • 配置较为复杂
  • 插件生态有限,难以开发扩展
  • 理解日志具有一定难度
免费试用 EMQX Cloud
全托管的 MQTT 消息云服务
开始试用 →

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。

Mosquitto

官网:https://mosquitto.org/

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 架构上顺畅运行。

NanoMQ

官网:https://nanomq.io/

GitHub:https://github.com/nanomq/nanomq

优点:

  • 设计轻巧
  • 多线程和异步 I/O
  • 高度便携
  • 启动占用空间小
  • 部署方便
  • 能够与无代理协议桥接

缺点:

  • 不支持集群
  • 作为早期项目,社区和用户群规模较小
  • 文档和教程不多
  • 缺少企业级功能(如数据集成)
免费试用 NanoMQ
开始试用 →

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 次提交。

官网:https://www.vernemq.com/

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 技术革新。欢迎查看我们的博客了解更多信息:

咨询 EMQ 技术专家
联系我们 →

推荐阅读