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 数排名第三。
主流开源 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 被广泛应用于各个行业的重要业务领域,如物联网、工业物联网、网联汽车、制造业和电信行业等。
官网:https://www.emqx.io/
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。
官网: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 架构上顺畅运行。
官网:https://nanomq.io/
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 次提交。
官网:https://www.vernemq.com/
GitHub:https://github.com/vernemq/vernemq
优点:
- 保证高可用性
- 具有横向扩展性
- 支持消息持久化
缺点:
- 未经验证的集群架构
- 文档不足
- 企业级功能有限
- 不再积极开发
可扩展性、性能和可靠性
在深入比较这些 MQTT Broker 的特性和功能之前,我们先来看一下它们的可扩展性、可用性、性能、延迟和可靠性。
- 可扩展性:能否横向扩展以处理百万级并发 MQTT 连接?
- 可用性:是否支持关键业务应用的高可用集群?
- 性能:每秒能路由和交付多少 QoS/0/1/2 MQTT 消息?
- 延迟:能以多快的速度将 MQTT 消息从一个 MQTT 客户端分发和传递到另一个 MQTT 客户端?
- 可靠性:是否支持 MQTT 消息持久性和无数据丢失的交付?
以下是这四个 MQTT Broker 的对比分析:
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,进一步优化了物联网通信。
安全性与认证鉴权
对于连接物联网设备以及使用 MQTT Broker 在连接设备之间交换的数据而言,安全性至关重要。本文中对比的所有 Broker 都支持基于 TLS/SSL 的安全连接以及身份验证和授权机制,例如用户名 / 密码、JWT、X.509 证书和访问控制列表。
此外,EMQX 还提供高级安全功能,例如与外部数据库集成、OCSP Stapling、细粒度访问控制策略、抖动检测以及对 OAuth 2.0 授权的支持。
数据集成
这四个 Broker 都支持通过 WebHook 与外部服务集成。作为轻量级 Broker,Mosquitto 和 NanoMQ 不支持数据集成。用户可以编写代码对来自 Mosquitto 的 MQTT 消息进行订阅并发送到外部数据库或云服务中。EMQX 提供内置的基于 SQL 的规则引擎,用户可以在 Broker 内实时提取、过滤、丰富和转换 MQTT 消息。EMQX 企业版提供开箱即用的数据桥接功能,实现与 Kafka、数据库和云服务无缝集成。
可操作性、可观测性与兼容性
这四个 MQTT Broker 都是用户友好的,并配备了必要的日志记录和调试功能,可以有效地监控其状态并解决问题。它们可以在各种操作系统和公共云平台上运行。EMQX 对 Kubernetes Operator 和 Terraform 都有出色的支持。此外,EMQX 通过 HTTP API 和 Dashboard 提供丰富的可视化监控能力,让监控和管理变得更加简单。EMQX 还支持与 Prometheus、OpenTelemetry、Grafana 集成,使运维团队能够轻松使用第三方监控平台。
汇总对比表
我们在下表中总结了对这几个主流开源 MQTT Broker 的总体评价:
结语
在过去的十年中,开源 MQTT Broker 引领了 MQTT 技术创新,在推进 MQTT 消息协议功能、可扩展性和互操作性提升方面发挥了重要作用。这使 MQTT 在如今得到了广泛采用。
选择 MQTT Broker 取决于多种因素,例如连接设备的数量、消息吞吐量和集成要求。通过本文的对比,我们可看出,EMQX 是一个高度可扩展的企业级 MQTT Broker,适用于云上的大规模关键任务部署;Mosquitto 和 NanoMQ 速度快、量级轻,更适合部署在资源有限的嵌入式硬件、工业网关和物联网边缘服务器上。
随着物联网的快速发展,预计到 2030 年,全球连接设备的数量将超过 1000 亿。MQTT 作为物联网的神经系统也将因此变得更加不可或缺。EMQ 正致力于 MQTT over QUIC、MQTT Serverless、MQTT 统一命名空间等多项领先的 MQTT 技术革新。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。