EMQX vs Mosquitto | 2023 MQTT Broker 对比

news2024/12/22 22:44:39

引言

物联网开发者需要为自己的物联网项目选择合适的 MQTT 消息产品或服务,从而构建可靠高效的基础数据层,保障上层物联网业务。目前市面上有很多开源的 MQTT 产品,在性能功能等方面各有优点。本文将选取目前最为流行的两个开源 MQTT Broker:EMQX 和 Mosquitto,从技术架构、性能、功能、社区情况等多维度进行 1v1 对比,帮助读者更加深入了解这两个产品。

Mosquitto 简介

Mosquitto 项目最初由 IBM 和 Eurotech 于 2013 年开发,后来于 2016 年捐赠给 Eclipse 基金会。Eclipse Mosquitto 基于 Eclipse 公共许可证(EPL/EDL license)发布,用户可以免费使用。作为全球使用最广的 MQTT 协议实现之一 ,截至 2023 年 3 月,Mosquitto 的 GitHub Star 数超过了 7.1 K。

Mosquitto 用 C/C++ 编写,采用单线程架构。Mosquitto 支持 MQTT 协议的 5.0、3.1.1 和 3.1 版本,同时支持 SSL/TLS 和 WebSockets。轻量级设计使其适合部署在嵌入式设备或资源有限的服务器上。

优点:

  • 易于安装使用
  • 支持 MQTT 5.0 协议
  • 轻量高效
  • 积极的社区支持

缺点:

  • 可扩展性有限(<100k)
  • 没有集群支持
  • 缺少企业功能
  • 有限的云原生支持

EMQX 简介

EMQX 项目于 2012 年底在 Github 发布,许可证为 Apache2,如今已成为世界上最具扩展性的 MQTT 消息服务器,被广泛应用于物联网、车联网、工业物联网等各类关键业务场景。

EMQX 采用 Erlang/OTP 编写,这是一种用于构建大规模可扩展软实时系统的编程语言。与 Mosquitto 不同,EMQX 在设计之初即采用了分布式集群架构,可以轻松实现弹性水平扩展,从而稳定承载大规模的 MQTT 客户端接入。最新版本 EMQX 5.0 可在 23 个节点的单集群中建立 1 亿个并发的 MQTT 连接。

优点:

  • 支持大规模部署
  • 高可用性
  • 横向可扩展性
  • 高性能和高可靠
  • 丰富的企业功能
  • 率先采用 MQTT over QUIC

缺点:

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

社区情况

EMQX 是 GitHub 上评价最高、最活跃的 MQTT Broker 项目,在过去 12 个月里有 11.4K 个 Star 和超过 3000 个 Commit。

Mosquitto 以其轻量级的单线程架构在部署上比 EMQX 更普遍,特别是在资源有限的嵌入式设备上。

注:Mosquitto 项目最初由 Roger Light 在 2008 年创建,后来在 2013 年被 Eclipse 基金会接收。

性能与可扩展性

Mosquitto 作为一个轻量级 MQTT 消息中间件有着比较优秀的单节点性能,单机可以支撑 10w 级别的设备并发连接。但不支持集群架构。

EMQX 作为可集群部署的大规模消息服务器,单节点可以支持百万级并发连接,单集群支持亿级并发连接。但 CPU 和内存使用率更高。

EMQX 是如何支持单集群亿级 MQTT 并发连接的?点击查看详细测试过程 →

协议支持

Mosiquitto 作为 MQTT Broker 提供了完整的 MQTT 3.1/3.1.1/5.0 协议支持,支持协议规范中的遗嘱消息、保留消息、共享订阅等能力,同时也支持 MQTT over WebSocket,可以满足大多数 MQTT 设备接入需求。

EMQX 同样完整支持 MQTT 3.1/3.1.1/5.0 以及 MQTT over Websocket 协议。同时 EMQX 5.0 开创性地引入了下一代互联网协议 HTTP/3 的底层传输协议 QUIC 的支持,以解决复杂网络环境下的通信问题,提升整体吞吐量和移动连接的稳定性。此外,EMQX 也扩展支持 MQTT-SN、CoAP、LwM2M、STOMP 以及其他协议扩展。

安全性

安全性对于物联网设备连接以及设备之间、设备与云服务之间的数据交换至关重要。Mosquitto 和 EMQX 都支持基于 TLS/SSL 的安全连接。此外,EMQX 还支持 QUIC 传输、OCSP Stapling、Audit Logs 和 Black Duck 源代码扫描。

认证与鉴权

在客户端认证权限与访问控制方面,Mosiquitto 提供了动态安全插件,通过灵活的方式处理用户名/密码身份验证和访问控制。Mosiquitto 支持匿名与用户名密码方式认证,并可以通过动态安全插件提供的自定义组群和角色的方式控制消息主题的访问权限。

EMQX 支持多种认证机制,如用户名密码认证、JWT 认证以及基于 MQTT 5.0 协议的增强认证。EMQX 支持与多种数据存储方式集成,包括内置数据库、文件、MySQL、PostgreSQL、MongoDB 和 Redis。

此外,EMQX 为用户提供了黑名单功能,用户可以通过 Dashboard 和 HTTP API 将指定客户端加入黑名单以拒绝该客户端访问,除了客户端标识符以外,还支持直接封禁用户名甚至 IP 地址,方便用户灵活管理客户端的连接与访问。

数据集成

Mosquitto 默认通过 MQTT 客户端消息订阅方式实现外部系统对数据的消费。此外,Mosquitto 提供了多个 Mosquitto 之间的数据桥接能力,可以用于多个 broker 之间的分布式部署与数据打通。

EMQX 在数据集成方面提供了 WebHook 方式将客户端消息和事件推送到外部系统中。EMQX 也同样提供了类似于 Mosquitto 的 MQTT 数据桥接功能,可以连接多个 EMQX 集群或其他标准 MQTT 服务。EMQX 在企业版中重点增强了数据集成能力。EMQX 企业版可以通过规则引擎对接各类主流型数据库、消息队列以及云服务,在数据可靠性与架构设计灵活性上大大增强。

规则引擎

为了用户更加方便地实现高性能数据预处理与基于业务需求的数据路由,EMQX 内置了基于 SQL 的规则引擎组件,搭配数据桥接使用,无需编写代码即可实现一站式的 IoT 数据提取、过滤、转换、存储与处理,以加速应用集成和业务创新。

可操作性与可观测性

Mosquitto 提供了基本的日志和调试功能,用于监控代理状态和故障排除。然而,它缺乏先进的管理和监控功能,使用户难以从其运行状态获得更多洞察进行性能优化。

EMQX 通过 HTTP API 和 Dashboard 提供丰富和可视化的监控功能,使其更容易监控和管理。此外,EMQX 支持与 Prometheus、StatsD 和Datadog 的集成,使运维团队能够轻松使用第三方监控平台。

云原生部署与 K8s 支持

Mosquitto 支持基于 docker 的容器化部署。EMQX 在此基础上提供了基于 Kubernetes Operator 和 Terraform 云原生自动部署能力,更加方便在容器环境下的部署与运维。

EMQX Kubernetes Operator: 点击查看

桥接 Mosquitto 到 EMQX

虽然 EMQX 和 Mosquitto 作为 MQTT Broker 有着很多不同之处,但它们可以通过 MQTT 桥接的方式实现完美结合。

我们可以在物联网边缘的嵌入式硬件或网关上部署 Mosquitto,实现小规模边缘数据接入,然后通过桥接方式与云端的 EMQX 集成,实现大规模的云端数据汇聚接入。

桥接 Mosquitto MQTT 消息至 EMQX

结语

通过以上对比,我们可以看出:Mosquitto 作为单节点的轻量级 MQTT 消息中间件,更加适合部署在工业网关、工控机、小型服务器中,实现中小规模的 MQTT 设备连接场景下快速高效的数据接入与消息路由。而 EMQX 作为支持高可用集群的大规模 MQTT 消息服务器,更适合部署在数据中心、公有云或私有云环境,为较大规模数据接入以及对高可用有需求的用户提供服务。

您可以选择 Mosquitto 用于嵌入式硬件和 IoT 边缘部署,并使用 EMQX 作为云中高度可扩展、高可用的 MQTT 消息服务。

此外,对于有更大规模设备连接与大吞吐数据接入需求,且对数据完整性、数据持久化以及数据集成灵活性有较高要求的用户,我们建议您使用 EMQX 企业版本。

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

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

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

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

相关文章

最新!芯片行业有哪些知名企业?

01、芯片设计 芯片设计是产业链中重要的一环&#xff0c;影响后续芯片产品的功能、性能和成本&#xff0c;对研发实力要求较高。根据不同的下游应用&#xff0c;可分为四类&#xff1a; &#xff08;一&#xff09;集成电路&#xff1a;存储器、逻辑芯片&#xff08;CPU、GPU&…

进击的 Java !

编者按&#xff1a;近几年&#xff0c;随着云原生时代的到来&#xff0c;Java 遭受了诸多质疑。国际形势和行业格局的变化&#xff0c;大家一定充分感受到了云原生这个话题的热度&#xff0c;难道 Java 真的已过巅峰时期&#xff0c;要走向末路了吗&#xff1f;龙蜥社区 Java 语…

【Auto-GPT】会自主完成任务的 AI!安整的安装&使用教学

ChatGPT 需要我们不停的输入指令,引导 AI 的回答方向才能得到期待的结果;而 Auto-GPT 之所以爆红,就是因为他能够“自我反思”,只要给他任务,他就会不停地自问自答,不需要人为插手。 听起来是不是棒呆了?就让笔者透过这篇文章带大家了解如何安装 Auto-GPT,以及如何使用…

深入 Pinia:从代码出发探索 Vue 状态管理的奥秘

目录 一、 &#x1f3de;️创建源码分析环境1. 创建一个 vue 项目2. Pinia 源码入口3. 复制 Pinia 源码 & 在 main.ts 中初始化 Pinia 插件4. 添加必要仓库依赖5. 添加必要环境变量6. 环境测试 二、&#x1f9d0;源码分析&#xff08;1&#xff09;——执行流程三、&#x…

图像修复(Image Restoration)前沿

背景与现状 图像修复是一个长期存在的低层次视觉问题&#xff0c;旨在从损坏的输入图像中获取高质量图像&#xff0c;例如去模糊、去噪、去雾、去雨以及超分辨等。 L D ( H ) γ \mathbf{L} \mathbf{D}(\mathbf{H}) \gamma LD(H)γ 其中&#xff0c;L是低质量图像&#x…

电脑突然变成绿屏错误代码无法使用怎么办?

电脑突然变成绿屏错误代码无法使用怎么办&#xff1f;有用户使用电脑的时候&#xff0c;电脑桌面变成了绿屏的显示&#xff0c;所有的操作无法继续进行。遇到这个问题要怎么去进行解决呢&#xff1f;来看看详细的解决方法教学吧。 准备工作&#xff1a; 1、U盘一个&#xff08;…

Unity打包google play最新要求的aab文件的方法

很久不搞打包了&#xff0c;没想到google又整出新的花活了&#xff0c;apk变成了aab&#xff0c;这里分享一下。 首先有几个网址很重要&#xff0c;这里说一下&#xff1a; GitHub - google/play-unity-plugins: The Google Play Plugins for Unity provide C# APIs for acce…

第八届中国航天日 数字文创助推航天新国潮

2023年&#xff0c;正值中国空间站应用与发展新阶段开局之年&#xff0c;距离地球400公里外的天宫见证我国载人航天工程“三步走”发展战略从构想成为现实&#xff0c;中国空间站常态化运行之旅正式起航。 回首半个世纪前的酒泉戈壁&#xff0c;中国首枚运载火箭托举东方红一号…

MyBatisPlus代码生成器使用

MybatisPlus特点 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑 损耗小&#xff1a;启动即会自动注入基本 CURD&#xff0c;性能基本无损耗&#xff0c;直接面向对象操作 强大的 CRUD 操作&#xff1a;内置通用 Mappe…

使用FME 批量OSGB转FBX(OBJ) (亲测)

首先感谢这个UP主&#xff1a;OSGB单体模型批量转FBX&#xff0c;并保留原有文件目录_哔哩哔哩_bilibili 吐槽&#xff1a;刚开始使用了OpenSceneGraph 去转换&#xff0c;发现贴图有黑斑。而且没有找到批量转换的方法。于是花费几个小时时间去查阅相关资料&#xff0c;最后确定…

“上海升级”后 以太坊抛压为何没来?

关联加密资产市场的Web3重新进入市场上升期&#xff0c;而被普遍视作Web3主流基建的以太坊区块链也在近日经历了一场重要升级。 此次升级被命名为“上海升级”&#xff0c;源于社区期望以太坊能够如上海一般多元化地发展和繁荣。上海升级带来的最大改变是&#xff0c;验证者可…

操作指南|如何在Moonriver上使用Polkassembly参与OpenGov

Polkassembly是一个开源平台&#xff0c;任何人都可以探索并参与Moonbeam的链上治理。Polkassembly完全支持OpenGov&#xff08;也称为Gov2&#xff09;。OpenGov目前在Moonriver上运行&#xff0c;并很快就会在Moonbeam上运行。 Polkassembly让参与治理变得容易。您可以打开讨…

一次「找回」TraceId的问题分析与过程思考

用好中间件是每一个开发人员的基本功&#xff0c;一个专业的开发人员&#xff0c;追求的不仅是中间件的日常使用&#xff0c;还要探究这背后的设计初衷和底层逻辑&#xff0c;进而保证我们的系统运行更加稳定&#xff0c;让开发工作更加高效。 结合这一主题&#xff0c;本文从一…

掌握这些移动测试技巧,棘手的问题也能游刃有余解决了

目录&#xff1a;导读 引言 一、测试的程序 二、功能测试点 三、移动端安卓环境变量 性能测试 四、实操通过USB连接到手机设备 五、adb操作命令 写在最后 引言 你是否曾经遇到过打开一个移动应用后出现各种问题&#xff0c;比如卡顿、闪退等&#xff1f; 这些问题可能会…

【HDCTF2023】wp

【HDCTF2023】wp 文章目录 【HDCTF2023】wpwebWelcome To HDCTF 2023SearchMasterYamiYamiLoginMaster mischardMiscMasterMiscExtremeMiscSuperMisc web Welcome To HDCTF 2023 在源码的 game.js中找到了flag 在控制台输出 console.log(seeeeeeeecret)得flag SearchMaster …

一文解析:低代码开发平台和零代码平台有什么区别?以及如何选?

随着数字化转型的加速&#xff0c;企业和组织对于快速开发和部署应用程序的需求也越来越迫切。 为了满足这一需求&#xff0c;低代码和零代码平台应运而生。这两种平台都提供了快速构建应用程序的方法&#xff0c;但它们之间的区别是什么呢&#xff1f;本篇就来为大家解答一下…

Linux常用命令(二)

目录 VI/VIM编辑器 Linux的root用户 用户和用户组管理 getent命令 查看权限控制信息 修改权限控制 chmod 修改权限控制 chown VI/VIM编辑器 vim是vi的加强版&#xff0c;兼容vi的所有指令。可编辑文本、shell程序&#xff0c;能以不同颜色字体来辨别语法正确性。3种工作…

软件研发的项目经理都在用哪些好的设计和管理的软件工具?

软件研发是一个复杂而又有趣的过程&#xff0c;它涉及到多个阶段&#xff0c;如需求分析、设计、编码、测试、部署、维护等。在这个过程中&#xff0c;我们需要使用各种工具来帮助我们提高效率、保证质量、协作沟通、解决问题等。工具化是指将一些重复性或者困难的任务封装成可…

Python-pyppeteer解决微软Microsoft的登录机器人验证(8)

前言 本文是该专栏的第8篇,结合优质项目案例,让你精通使用Pyppeteer,后面会持续分享Pyppeteer的干货知识,记得关注。 在注册微软Microsoft账号或者注册outlook邮箱账号的时候,会遇到如下机器人验证: 是的,你可能第一眼看到这个验证页面,首先会想到是定位它的页面元素N…

《C++PrimerPlus》第六章 分支语句和逻辑运算符

本篇文章将对《CPrimerPlus》第3章进行勾画 以我个人习惯来勾画 C和C不同点将用红色高亮表示 关于C的额外补充知识用蓝色高亮表示 对C的注意点以及总结部分用绿色高亮表示 正常情况本专栏2周更新一次 文章目录 6.1 if语句![在这里插入图片描述](https://img-blog.csdnimg.cn/…