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

EMQX vs Mosquitto | MQTT Broker 对比

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

在这里插入图片描述

github社区情况

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

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

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

缺点:

上手复杂
难以有效管理
社区情况

认证与鉴权

在客户端认证权限与访问控制方面,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 云原生自动部署能力,更加方便在容器环境下的部署与运维。

在这里插入图片描述

结语

通过以上对比,我们可以看出:

Mosquitto 作为单节点的轻量级 MQTT 消息中间件,更加适合部署在工业网关、工控机、小型服务器中,实现中小规模的 MQTT 设备连接场景下快速高效的数据接入与消息路由

而 EMQX 作为支持高可用集群的大规模 MQTT 消息服务器,更适合部署在数据中心、公有云或私有云环境,为较大规模数据接入以及对高可用有需求的用户提供服务。

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

相关文章:

  • 振弦式渗压计的安装方式及注意要点
  • 英伟达AI布局的新动向:H200 GPU开启生成式AI的新纪元
  • 解决 uniapp 开发微信小程序 不能使用本地图片作为背景图 问题
  • 新生儿奶藓:原因、科普和注意事项
  • 软通动力赋能触觉智能打造嵌入式鸿蒙原生系统应用标杆
  • Linux系统下安装RabbitMQ超简单教程(非详细)(Centos8)
  • 【洛谷 P3853】[TJOI2007] 路标设置 题解(二分答案+递归)
  • 08.智慧商城——购物车布局、全选反选、功能实现
  • OpenHarmony源码下载
  • 光纤的跳线和尾纤
  • C 语言结构体(struct)
  • EtherCAT主站SOEM -- 6 -- SOEM之ethercatcoe.h/c(ethercateoe/foe/soe)文件解析
  • vscode终端npm install报错
  • 详细步骤记录:持续集成Jenkins自动化部署一个Maven项目
  • 2023年中职“网络安全“—Web 渗透测试②
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Computed property XXX was assigned to but it has no setter
  • CSS 三角实现
  • download使用浅析
  • Git同步原始仓库到Fork仓库中
  • js如何打印object对象
  • JS题目及答案整理
  • Node + FFmpeg 实现Canvas动画导出视频
  • Swoft 源码剖析 - 代码自动更新机制
  • vue-cli在webpack的配置文件探究
  • 百度小程序遇到的问题
  • 给github项目添加CI badge
  • 经典排序算法及其 Java 实现
  • 聚类分析——Kmeans
  • 你不可错过的前端面试题(一)
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 首页查询功能的一次实现过程
  • 线上 python http server profile 实践
  • 写给高年级小学生看的《Bash 指南》
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Prometheus VS InfluxDB
  • ​用户画像从0到100的构建思路
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma预处理命令
  • (一)认识微服务
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)平衡树
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *** 2003
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET程序员迈向卓越的必由之路
  • ::
  • ::before和::after 常见的用法
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据