当前位置: 首页 > news >正文

EMQX vs NanoMQ | 2023 MQTT Broker 对比

引言

EMQX 和 NanoMQ 都是由全球领先的开源物联网数据基础设施软件供应商 EMQ 开发的开源 MQTT Broker。

EMQX 是一个高度可扩展的大规模分布式 MQTT Broker,能够将百万级的物联网设备连接到云端。NanoMQ 则是专为物联网边缘场景设计的轻量级 Broker。

本文中我们将对 EMQX 和 NanoMQ 这两个 Broker 进行详细的对比分析。

EMQX 简介

EMQX 是目前全球最具扩展性的 MQTT 消息服务器,广泛用于物联网、工业物联网(IIoT)和车联网(IoV)等各类关键业务场景。其使用 Erlang/OTP 开发,采用了去中心化的分布式架构,具有高可用性并且支持横向扩展。

最新版本 EMQX 5.0 能够通过一个由 23 个节点组成的集群,支持高达 1 亿的 MQTT 并发连接。

了解详情请浏览:高度可扩展,EMQX 5.0 达成 1 亿 MQTT 连接

优点

  • 支持大规模部署
  • 支持集群,高度可扩展
  • 高性能和高可靠
  • 提供丰富的企业级功能
  • 开箱即用的数据集成功能

缺点:

  • 上手复杂
  • 难以有效管理

NanoMQ 简介

NanoMQ 是一个轻量级的 MQTT Broker,专为 IoT 边缘场景设计。它采用纯 C 语言编写,基于 NNG 的异步 I/O 多线程 Actor 模型,完全支持 MQTT 3.1.1 和 MQTT 5.0。

在单节点的场景下,NanoMQ 表现出很高的性能。其最为吸引人的优点是其轻便小巧,具备高度的可移植性和兼容性。它可以部署在任何支持 POSIX 标准的平台上,并且可以在多种 CPU 架构上运行,包括 x86_64、ARM、MIPS 和 RISC-V 等等。

优点

  • 设计轻巧
  • 具有高度的轻便性
  • 占用启动空间小
  • 部署方便
  • 能够与无代理协议桥接

缺点

  • 不支持水平扩展
  • 社区和用户群规模较小
  • 文档和教程不多
  • 不支持集群
  • 缺少企业级功能(如数据集成)

社区情况

EMQX 和 NanoMQ 两个开源项目都托管在 GitHub 上。EMQX 自 2012 年推出以来,已经成为最受欢迎的 MQTT Broker 之一,目前 Star 数为 11.4k 。NanoMQ 是一个于 2020 年发起的新项目,处于初期阶段,目前有 800+ Star。这两个项目都在持续开发中,在过去的 12 个月里有数千次 Commit 提交。

功能特性

EMQX 和 NanoMQ 都完全遵循 MQTT 3.1.1 和 MQTT 5.0 规范,支持 MQTT over WebSocket 和 SSL/TLS 加密,并且是率先支持 MQTT 新一代协议 MQTT Over QUIC 的 Broker。

EMQX 提供多个协议网关支持,包括 LwM2M/CoAP、MQTT-SN 和 Stomp。而 NanoMQ 则支持将边缘场景中去中心化的协议如 DDS、ZeroMQ 和 Nanomsg/NNG 等转换成 MQTT 消息并与云端桥接。

两者都支持多种身份认证方式,包括用户名密码、JWT。EMQX 还额外支持 OAuth 2.0 身份验证和 IP 白名单/黑名单。

在企业级功能方面,EMQX 企业版提供了强大的规则引擎和数据桥接功能,可以轻松地与 Kafka、SQL、NoSQL 数据库和云服务进行集成。

扩展性和性能

EMQX 因其极高的可扩展性和优异性能成为大规模物联网关键业务项目的首选。此外,其分布式的集群架构还保证了高可用性。

NanoMQ 基于 NNG 的异步 I/O 和多线程模型,具有优秀的轻量级设计。它能够有效地利用 CPU 和内存资源,在现代 SMP 系统上可以良好的支持多内核,并且其启动占用空间不到 200k,具有小巧高效的特点。

简而言之,两者在性能、扩展性和可靠性方面与其他 MQTT Broker 相比都有很大的优势。

可操作性和可观测性

EMQX 拥有用户友好的 Dashboard 和丰富的 HTTP API,支持通过 StatsD、Prometheus 和 Grafana 进行监控。NanoMQ 部署简单、配置方便、管理便捷,但它在管理和监控方面还不够完善。

这两个 Broker 都相对容易使用,但是 NanoMQ 的极简设计更利于初学者学习和掌握 MQTT。

数据集成

NanoMQ 作为一个轻量级 Broker,没有提供数据集成功能。而 EMQX 提供了丰富的数据集成,特别是运行在云端的企业版,可以通过内置的数据桥接功能与 Kafka、数据库和云服务实现无缝集成。

桥接 NanoMQ 到 EMQX

我们可以将 NanoMQ 部署在物联网边缘端的小型设备或网关上,然后通过桥接功能把数据汇总和传输到云端的大型 EMQX 集群。

结语

EMQX 和 NanoMQ 是当前最活跃的 MQTT Broker 项目,拥有优秀的开源社区和商业支持。

EMQX 凭借其扩展性、可靠性和丰富的功能,成为物联网关键业务云端 MQTT 消息服务的首选。而轻量、高效、低成本的 NanoMQ 则更适用于工业物联网和边缘物联网应用。

您可以根据自己的需求和场景选择使用其中一个或两个配合使用。我们相信这两个 MQTT Broker 将在未来引领 MQTT 技术创新。

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

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

相关文章:

EMQX vs NanoMQ | 2023 MQTT Broker 对比

引言 EMQX 和 NanoMQ 都是由全球领先的开源物联网数据基础设施软件供应商 EMQ 开发的开源 MQTT Broker。 EMQX 是一个高度可扩展的大规模分布式 MQTT Broker,能够将百万级的物联网设备连接到云端。NanoMQ 则是专为物联网边缘场景设计的轻量级 Broker。 本文中我们…...

RabbitMQ实现消息的延迟推送或延迟发送

一、RabbitMQ是什么? 1.RabbitMQ简介 RabbitMQ是有erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 常见的消息队列有:RabbitMQ、Kafka 和 ActiveMQ 2.RabbitMQ的优点 Rab…...

解决python中import导入自己的包呈现灰色 无效的问题

打开File–> Setting—> 打开 Console下的Python Console,把选项(Add source roots to PYTHONPAT)点击勾选上。 右键点击需要导入的工作空间文件夹,找到Mark Directory as 选择Source Root。 另外,Python中的…...

消息中间件对比

1,常见消息中间件对比(后续逐个介绍) 比较项TubeMQKafkaPulsar数据时延非常低,10ms比较低,250ms非常低,10msTPS高,14W/s一般,10W/s高,14W/s (高性能场景)过滤消费支持服务端过滤和客户端过滤客…...

nodejs+vue 高校校园食堂餐品在线订购网

食堂作为学校的一个重要的部门,为学生提供了用餐的地点,学生可以在食堂享用丰富的餐品,建立一个在校订餐网站,帮助了学生提供一个用餐订餐的系统,也帮助了食堂提供了一个餐品展示的站点。 园的食堂作为一个窗口单位&a…...

SpringBoot【运维实用篇】---- SpringBoot程序的打包与运行

SpringBoot【运维实用篇】---- SpringBoot程序的打包与运行 程序打包程序运行SpringBoot程序打包失败处理命令行启动常见问题及解决方案 刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知,我们天天写程序是在Idea下写的,运行也是在Idea下运行的…...

10万字智慧政务数据中心平台建设方案

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 一、 项目建设内容 1. 基础支撑平台 基础支撑平台是云教育公共服务平台各子系统的公共运行环境,提供底层数据交换、集成服务以及统一身份认证和基础数据同步服…...

使用 TensorFlow 构建机器学习项目:1~5

原文:Building Machine Learning Projects with TensorFlow 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象&#x…...

【store商城项目08】删除用户的收获地址

1.删除收获地址-持久层 1.1规划SQL语句 根据aid判断数据是否存在,根据返回的uid判断数据是否对应(已开发)根据aid删除的SQL delete from t_address where aid ?根据1中的SQL返回的对象判断是否为默认地址,若为默认地址&#…...

SpringBooot

目录 一、简介 1、使用原因 2、JavaConfig (1)Configuration注解 (2)Bean注解 (3)ImportResource注解 (4)PropertyResource注解 (5)案例 3、简介 4…...

测牛学堂:2023软件测试linux和shell脚本入门系列(shell的运算符)

shell中的注释 以# 开头的就是shell中的注释,不会被执行,是给编程的人看的。 shell中的运算符 shell中有很多运算符。 按照分类,可以分为算术运算符,关系运算符,布尔运算符,字符串运算符,文件…...

TensorFlow 2.0 快速入门指南:第三部分

原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现…...

webpack介绍

webpack是一个静态资源打包工具 开发时,我们会使用框架(Vue,React),ES6模块化语法,Less/Sass等css预处理器等语法进行开发。 这样的代码想要在浏览器运行必须经过编译成浏览器能识别的JS、CSS等语法&#x…...

SpringBoot 面试题汇总

1、spring-boot-starter-parent 有什么用 ? 我们都知道,新创建一个 SpringBoot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用: 1、 定义了 J…...

已知原根多项式和寄存器初始值时求LFSR的简单例子

线性反馈移位寄存器(LFSR)是一种用于生成伪随机数序列的简单结构。在这里,我们有一个四项原根多项式 p ( x ) 1 x 0 x 2 11 0 2 p(x) 1 x 0x^2 110_2 p(x)1x0x21102​ 和初始值 S 0 100 S_0 100 S0​100。我们将使用 LFSR 动作过…...

【场景生成与削减】基于蒙特卡洛法场景生成及启发式同步回带削减风电、光伏、负荷研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

探索C/C++ main函数:成为编程高手的关键步骤

探索C/C main函数:成为编程高手的关键步骤(Exploring the C/C Main Function: A Key Step to Becoming a Programming Master) 引言(Introduction)main函数的基本概念(Basic Concepts of the main function…...

【Linux】应用层协议—http

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…...

七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)

Django-extensions是 Django 的扩展应用,给django开发者提供了许多便捷的扩展工具(extensions),它提供了许多有用的工具和命令行工具,帮助 Django 开发者更高效地进行开发和调试。它的作用包括: - 提供了更多的Django命令&#x…...

浏览器特色状态

强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且Size显示from disk cache或from memory cache。 强缓存可以通过设置两种HTTP Header实现:Expir…...

context 浅析

在缺少直接调用关系的两个函数之间传递数据,一般都会考虑使用 context,而 context 也被用来存储整个请求链路的公参信息,用户 uid、链路 traceID、特定的业务参数等。函数第一个参数类型设置为 context.Context 也是 Go 的默认写法&#xff0…...

Bandizip已管理员身份运行

系列文章目录 文章目录 系列文章目录前言一、Bandzib是什么?二、使用步骤1.引入库 前言 在解压krita源码包时Bandizip报错 一、Bandzib是什么? bandzip官网 Bandizip 是一款压缩软件,它支持Zip、7-Zip 和 RAR 以及其它压缩格式。它拥有非…...

LiveCharts2 初步认识

文章目录 1 LiveCharts2 是什么?2 LiveCharts2 可以做什么?3 简单使用LiveCharts2 ,实现动态曲线图 1 LiveCharts2 是什么? GitHub:https://github.com/beto-rodriguez/LiveCharts2 官网: https://lvchar…...

Java设计模式 11-代理模式

代理模式 一、 代理模式(Proxy) 1、代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象…...

Python综合案例-小费数据集的数据分析(详细思路+源码解析)

目录 1. 请导入相应模块并获取数据。导入待处理数据tips.xls,并显示前5行。 2、分析数据 3.增加一列“人均消费” 4查询抽烟男性中人均消费大于5的数据 5.分析小费金额和消费总额的关系,小费金额与消费总额是否存在正相关关系。画图观察。 6分析男女顾…...

软件安全测试

软件安全性测试包括程序、网络、数据库安全性测试。根据系统安全指标不同测试策略也不同。 1.用户程序安全的测试要考虑问题包括: ① 明确区分系统中不同用户权限; ② 系统中会不会出现用户冲突; ③ 系统会不会因用户的权限的改变造成混乱; ④ 用户登陆密码是否…...

Scala模式匹配

Scala中有一个非常强大的模式匹配机制,应用也非常广泛, 例如: 判断固定值 类型查询 快速获取数据 简单模式匹配 一个模式匹配包含了一系列备选项,每个备选项都开始于关键字 case。且每个备选项都包含了一个模式及一到多个表达式。箭头符号 > 隔开…...

银行数仓分层架构

一、为什么要对数仓分层 实现好分层架构,有以下好处: 1清晰数据结构: 每一个数据分层都有对应的作用域,在使用数据的时候能更方便的定位和理解。 2数据血缘追踪: 提供给业务人员或下游系统的数据服务时都是目标数据&…...

Go并发编程的学习代码示例:生产者消费者模型

文章目录 前言代码仓库核心概念main.go(有详细注释)结果总结参考资料作者的话 前言 Go并发编程学习的简单代码示例:生产者消费者模型。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (g…...

求a的n次幂

文章目录 求a的n次幂程序设计程序分析求a的n次幂 【问题描述】要求利用书上介绍的从左至右二进制幂算法求a的n次幂; 【输入形式】输入两个正整数,一个是a,一个是n,中间用空格分开 【输出形式】输出一个整数 【样例输入】2 10 【样例输出】1024 【样例输入】3 4 【样例输出】…...