Mosquitto vs NanoMQ | 2023 MQTT Broker 对比

news2024/11/22 15:42:08

引言

Mosquitto 和 NanoMQ 都是用 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 并发连接。而且,随着消息吞吐量的增长,它的延迟也会随之增加。

优点:

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

缺点:

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

NanoMQ 简介

NanoMQ 是 EMQ 于 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 等等。

社区情况

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

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

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

功能特性

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 产品组合获取很多实用功能,从而为边缘应用的开发节省更多时间。

扩展性和性能

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

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

易用性

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

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

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

桥接到 EMQX Cloud

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

未来展望

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/450504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构:单向链表(无头非循环)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下数据结构方面有关链表的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C语言专栏&#xff1a;C语言&#xff1a;从入门到…

【云原生】prometheus监控告警之安装部署alertmanager实战

前言 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家&#x1f609;&#x1f609; &#x1f495; 座右铭&#xff1a; 先努力成长自己&#xff0c;再帮助更多的人 &#xff0c…

Python基础知识:绝对/相对路径等

1 Python处理相对/绝对路径 由于本人在导入数据时&#xff0c;十分喜欢相对路径&#xff08;在数据的上一级文件中&#xff0c;新建文件夹保存处理整个代码处理过程&#xff09;&#xff0c;因此&#xff0c;将首先简单介绍下Python中相对/绝对路径的处理。 1.1 绝对路径 一…

状态压缩DP-蒙德里安的梦想

题意 求把 NM 的棋盘分割成若干个 12 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4 时&#xff0c;共有 5 种方案。当 N2&#xff0c;M3 时&#xff0c;共有 3 种方案。 如下图所示&#xff1a; 输入格式 输入包含多组测试用例。 每组测试用例占一行&#xff0…

Jupyter notebook安装教程

文章目录 前言一、安装步骤1、安装 Python 编译器2、安装 jupyter3、运行 Jupyter notebook 二、 更改打开文件位置和快捷启动方式1、更改打开文件位置2、创建快捷启动方式 前言 Jupyter Notebook 是以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运行代码&…

20230421 | 203. 移除链表元素、707. 设计链表、206. 反转链表

1、203. 移除链表元素 方法1&#xff1a;不添加虚拟节点方式&#xff0c;但是要注意处理删除头部的数据 时间复杂度 O(n) 空间复杂度 O(1) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* List…

婚恋交友app开发中需要注意的安全问题

前言 随着移动设备的普及&#xff0c;婚恋交友app已经成为了人们生活中重要的一部分。但是&#xff0c;这些应用的开发者需要确保应用的安全性&#xff0c;以保护用户的隐私和数据免受攻击。本文将介绍在婚恋交友app开发中需要注意的安全问题。 在当今数字化时代&#xff0c;…

狗屁不通文章生成器下载-狗屁不通生成器网址

狗屁不通文章生成器 狗屁不通文章生成器&#xff08;也称为“吹牛生成器”&#xff09;是使用自然语言处理技术和机器学习算法生成随机文章的工具。这些文章往往没有意义&#xff0c;因为它们是从各种不相关的话语中随机组合而成的。 虽然这些文章看起来毫无意义&#xff0c;…

显卡GPU与CUDA

文章目录 1 什么是GPU1.1 独立显卡1.2 核心显卡 2 驱动3 深度学习显卡CUDA4 GPU VS CPU5 深度学习环境配置中各软件的关系windows下判断有无NVIDIA GPU16G512G8核14核 1 什么是GPU GPU就是显卡Graphics Processing Unit 图像处理单元显卡主要用于在屏幕上显示图像&#xff0c;…

ROS学习第二十六节——机器人仿真相关组件

1.URDF URDF是 Unified Robot Description Format 的首字母缩写&#xff0c;直译为统一(标准化)机器人描述格式&#xff0c;可以以一种 XML 的方式描述机器人的部分结构&#xff0c;比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C 内置的解释器…

服务(第十篇)Nginx和tomcat反向代理(动静分离)

正向代理&#xff1a; 当用户想访问某一网址时&#xff0c;用户先访问代理服务器&#xff0c;然后由代理服务器向目标网址发送请求最终将数据返回代理服务器&#xff0c;最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 反向代理&#xff1a;基本流程是与正向代理…

毕业-单片机-嵌入式~三年经历回顾

入行嵌入式软件开发 20年6月疫情第一次缓和、实操51单片机&#xff1b;20年9月郑州实习、温湿度采集类低功耗产品、初次接触ARM Cortex M0/M3 单片机&#xff1b;21年5月毕业来到杭州、不懂应届生的宝贵青春&#xff01;匆匆忙忙进厂&#xff5e;人生中第一个项目&#xff1a;…

使用vscode、cmake配置c++开发环境

使用vscode、cmake配置c开发环境 下载软件安装包VS codegcc编译器cmake 设置环境变量VS code插件安装 下载软件安装包 VS code 根据自己电脑选择合适版本下载安装即可。 官网链接&#xff1a;https://code.visualstudio.com/download gcc编译器 我使用的是mingw-w64编译器…

kong(2):docker搭建kong环境

Kong 安装有两种方式一种是没有数据库依赖的DB-less 模式&#xff0c;另一种是with a Database 模式。我们这里使用第二种带Database的模式&#xff0c;因为这种模式功能更全。 1 docker安装Kong 1.1构建Kong的容器网络 首先我们创建一个Docker自定义网络&#xff0c;以允许容…

022:Mapbox GL 加载geojson数据,形成热力图,自定义样式

第022个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载geojson数据,形成热力图. paint设置的参数:heatmap-color,heatmap-intensity,heatmap-opacity,heatmap-radius,heatmap-weight,visibility,具体请参考下面的api链接。 直接复制下面的 vue+mapbox源代…

如何实现网络安全的无缝衔接

随着信息技术的飞速发展&#xff0c;数字化转型已成为企业发展的必经之路。然而&#xff0c;随着技术进步带来的便利&#xff0c;网络安全问题也日益凸显。那么&#xff0c;在数字化转型的过程中&#xff0c;企业如何实现网络安全的无缝衔接呢&#xff1f; 一、网络安全与数字化…

功能分析临时参考

App 组件中注释 Menu&#xff0c; 去除顶部菜单 MenuWrapper SubMenuComponent 请求/chart/add &#xff0c;直接展示绘图页 此过程&#xff0c;浏览器只加载静态资源&#xff0c;没有api的数据请求。 取消登录限制&#xff1a; api: GET, POST /chart/add view: SliceModel…

Elasticsearch:了解和解决文档更新后 Elasticsearch 分数的变化

问题 问卷中有如下这样的文档&#xff0c;开发者想通过 match query 搜索这些文档来使用分数。 POST sample-index-test/_doc/1 {"first_name": "James","last_name" : "Osaka" } 以下是对上述文档的示例查询&#xff1a; GET sam…

阿里6面,成功唬住面试官拿了26K,突然感觉软件测试面试貌似不太难...

一次闲聊&#xff0c;一个在阿里上班的朋友突然说起他在阿里的面试经历。 朋友说&#xff0c;阿里的面试挺独特&#xff0c;每轮面试都没有 HR 约时间&#xff0c;一般是晚上 8 点左右面试官来一个电话&#xff0c;问是否能面试&#xff0c;能的话开始面&#xff0c;不能就约一…

【MYSQL】索引与事务(超详细)

文章目录 &#x1f337; 1.索引⭐️ 1.1 定义⭐️ 1.2 为什么要用索引⭐️ 1.3 作用⭐️ 1.4 使用场景⭐️ 1.5 使用&#x1f341; 1.5.1 查看索引&#x1f341; 1.5.2 创建索引&#x1f341; 1.5.3 删除索引 ⭐️ 1.6 创建索引的⽅式⭐️ 1.7 选择索引的数据结构&#xff08;面…