Mosquitto vs NanoMQ | 2023 MQTT Broker 对比

简介: Mosquitto与NanoMQ都很适用于工业物联网和嵌入式设备等资源受限的场景。本文将从功能、性能、技术细节和应用场景等方面对这两款MQTT Broker进行详细的对比分析。

Mosquitto vs NanoMQ —2023 MQTT Broker 对比 图1.png

引言

MosquittoNanoMQ 都是用 C/C++ 开发的快速轻量的开源 MQTT Broker,完全支持 MQTT 3.1.1 和 5.0。

虽然 Mosquitto 和 NanoMQ 都具有轻量级和低资源消耗的特点,但它们的架构设计却截然不同。Mosquitto 采用单线程模式,而 NanoMQ 则基于 NNG 的异步 I/O 实现了多线程并行。

两者都很适用于工业物联网和嵌入式设备等资源受限的场景。本文将从功能、性能、技术细节和应用场景等方面对这两款 Broker 进行详细的对比分析。

Mosquitto 简介

Mosquitto 是由 Roger Light 在 2013 年开发的开源 MQTT 消息 Broker(EPL/EDL 许可证),后来捐赠给了 Eclipse 基金会。

Mosquitto 设计简洁高效,以单线程守护进程的形式运行,并支持 epoll。它能够接收某个套接字传入的数据,然后将其转发给其他套接字。

Mosquitto 虽然易于实现,但也存在一些局限性。由于它采用了单线程的架构,无法利用多核 CPU 来处理更多的 MQTT 并发连接。而且,随着消息吞吐量的增长,它的延迟也会随之增加。

Mosquitto 图2.png

优点:

  • 上手简单
  • 支持 MQTT 5.0 协议
  • 资源占用少,运行速度快
  • 拥有活跃的开源社区

缺点:

  • 扩展性有限(<10万)
  • 不支持集群
  • 缺少企业级功能
  • 有限的云原生支持

NanoMQ 简介

NanoMQEMQ 于 2020 年发布的一个开源项目(MIT 许可证),旨在为物联网边缘场景提供轻量级、快速、支持多线程的 MQTT Broker。该项目计划在 2023 年 Q3 之前捐赠给 LF Edge 基金会。

与 Mosquitto 的单线程设计不同,NanoMQ 基于 NNG 的异步 I/O 构建,内置 Actor 多线程模型。这使得 NanoMQ 能够充分发挥现代 SMP 系统的多核优势。

NanoMQ 还可以用作边缘消息总线,可以将 DDS、NNG、ZeroMQ 等协议转换为 MQTT,然后通过 MQTT 或者 QUIC 在 Broker 之间或从边缘到云之间桥接 MQTT 消息。

它具备高度的可移植性,可以部署在任何支持 POSIX 标准的平台上,并且可以在多种 CPU 架构上运行,包括 x86_64、ARM、MIPS 和 RISC-V 等等。

NanoMQ 图3.png

社区情况

Mosquitto 是目前最流行的 MQTT Broker 之一,以其轻量级的设计而闻名,适合在嵌入式硬件上部署。

NanoMQ 作为一个 2020 年才启动的项目,虽然还处于早期阶段,但发展势头强劲。在过去的一年里,该项目已经完成了 1000 多次代码提交。

这两个开源项目都托管在 GitHub 上,其社区相关指标如下:

表格1.png

功能特性

Mosquitto 和 NanoMQ 均完整支持 MQTT 3.1/3.1.1/5.0 协议,包括遗嘱消息、保留消息、共享订阅等功能。

在传输方面,两者都支持 MQTT over TCP、TLS/SSL 和 WebSocket。NanoMQ 作为一个 2020 年设计的 Broker,还引入了 MQTT over QUIC,使其桥接功能具有多路复用以及快速建立和连接地址迁移的优势。

此外,NanoMQ 还提供了一系列管理和集成功能,如 HTTP API、WebHook、上线/下线事件钩子和规则引擎等。边缘计算领域用户可以基于 NanoMQ 产品组合获取很多实用功能,从而为边缘应用的开发节省更多时间。

表格2.png

扩展性和性能

NanoMQ 是一款专为边缘计算打造的现代 MQTT Broker,可以满足不断增长的性能、扩展性、空间参数、并发和延迟等方面需求。NanoMQ 内置先进的 Actor 线程模型,可以有效利用多核 CPU 的算力资源,在保证高吞吐量的同时能够实现低延时。这给了用户自由选择的空间:无论是性能、CPU 核心还是功能集,都可以随着需求变化而轻松调整和迁移。无论是用它来构建智能家居网关、工业机器人、无人机,还是复杂的智能车辆,NanoMQ 都能够胜任。

Mosquitto 针对的是传统嵌入式场景,这意味着它更加节省资源,消耗更少的内存和 CPU。因此,Mosquitto 更适用于物联网传感器和低处理能力设备,而 NanoMQ 则更适合高性能网关和服务器。此外,Mosquitto 的悠久的开源历史,保证其具有很高的稳定性,当用户对性能和功能的要求不高,并且项目有紧迫的时间表,需要快速完成时,它依然是最佳选择。

表格3.png

易用性

Mosquitto 和 NanoMQ 的安装包都很小巧,安装起来很方便。但它们都缺少一些高级的管理和监控功能,比如 Dashboard。

Mosquitto 的配置文件采用键值格式,使得配置过程很直观。它还拥有完善的文档和活跃的用户社区。

相比之下,NanoMQ 对配置的要求更高,可能会让初学者花费一些时间。但对于有经验的用户来说,它提供了更多的控制和定制选项。

表格4.png

桥接到 EMQX Cloud

EMQX Cloud 是基于开源分布式 MQTT Broker EMQX 构建的高度可扩展的 MQTT 消息服务。我们可以轻松地将物联网边缘的 Mosquitto 或 NanoMQ 桥接至 EMQX Cloud 服务。

将 Mosquitto 和 NanoMQ 桥接到 EMQX Cloud 图4.png

未来展望

Mosquitto 2.0 版本新增了 epoll 支持,旨在解决 c10k 连接扩展问题。

NanoMQ 正在引领 MQTT over QUIC 技术,这是自 2017 年发布 MQTT 5.0 规范以来 MQTT 协议最具创新性的进展。MQTT over QUIC 通过多路复用、更快的连接建立和迁移等特性,有望成为下一代 MQTT 标准。通过实现基于 QUIC 的 QoS 优先级和流-主题配对等创新功能,NanoMQ 正在不断加速 QUIC 的普及。

结语

总的来说,Mosquitto 和 NanoMQ 都是优秀的轻量级 MQTT Broker,适用于物联网边缘的消息传递。用户可以根据自身需求,将它们部署在低功耗传感器、嵌入式硬件和工业物联网等多种场景中。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/mosquitto-vs-nanomq-2023-mqtt-broker-comparison

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
4月前
|
消息中间件 存储 监控
消息队列 MQ使用问题之客户端重启后仍然出现broker接收消息不均匀,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 网络协议 RocketMQ
消息队列 MQ产品使用合集之broker开启proxy,启动之后producer生产消息始终都只到一个broker,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
3月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
90 1
|
3月前
|
消息中间件 SQL 监控
RocketMQ 5.3.0 版本中 Broker IP 配置为 IPv6 的情况
【8月更文第28天】RocketMQ 是一款分布式消息中间件,支持多种消息发布和订阅模式。在 RocketMQ 5.3.0 版本中,Broker 的配置文件 `broker.conf` 允许配置 IPv6 地址。当 Broker 的 `brokerIP1` 配置为 IPv6 地址时,会对 Broker 的启动、消息推送和状态监控等方面产生影响。本文将探讨如何在 RocketMQ 中配置 IPv6 地址,并检查 Broker 的状态。
176 0
|
4月前
|
消息中间件 运维 RocketMQ
MetaQ/RocketMQ 原理问题之slave broker是从master同步信息的问题如何解决
MetaQ/RocketMQ 原理问题之slave broker是从master同步信息的问题如何解决
|
4月前
|
消息中间件 搜索推荐 RocketMQ
消息队列 MQ使用问题之如何将一个主题的多个分区分布到不同的Broker上
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 存储 RocketMQ
MetaQ/RocketMQ 原理问题之MetaQ中Broker的数据同步方式的问题如何解决
MetaQ/RocketMQ 原理问题之MetaQ中Broker的数据同步方式的问题如何解决
|
5月前
|
消息中间件 Java Shell
消息队列 MQ产品使用合集之启动broker&proxy的时候会报错,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
1天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
5天前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!

热门文章

最新文章