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

【MQTT】代理服务比较RabbitMQ、Mosquitto 和 EMQX

前言

目前要处理大量设备同时频繁发送数据的情况,MQTT协议确实是一个更优的选择,因为它特别适合需要低带宽和高效能的物联网应用,下面是对目前主流协议的对比

数据截止日期:2024年11月10日

基础设施

  • 后端: springcloud项目
  • 设备端:IOT设备,每秒上报数据

对比项

特性RabbitMQMosquittoEMQX
主要协议支持MQTT, AMQP, STOMP,等MQTTMQTT, WebSocket, MQTT-SN
适用场景高可配置性、多协议需求、企业级应用轻量级 IoT 应用、低资源消耗场景大规模 IoT 应用、高并发连接
性能高性能,通过插件支持 MQTT高效处理大量小型消息高性能,优化用于大量设备并发
资源效率相对较高的资源消耗低资源消耗低资源消耗,尤其在处理大量连接时
扩展性高,支持集群模式有限,主要依赖于单个节点的性能非常高,设计用于横向扩展
客户端库兼容性丰富的客户端库支持多种编程语言MQTT 客户端库广泛支持MQTT 客户端库广泛支持
社区和支持活跃的社区支持,广泛的文档和使用案例社区支持较强,文档充足活跃的社区,提供专业支持和丰富的文档
高可用性和可靠性支持持久化和消息确认,可配置的镜像队列和故障转移支持持久化但配置较简单高可用性配置,支持持久化和多种故障恢复机制
安全性支持多种认证和授权方式,TLS加密支持基本的认证和TLS加密支持多种认证方式,TLS加密,访问控制和插件式安全策略
安装和配置的简易性较复杂,尤其在集群和多协议配置时简单易安装,配置简便简单易安装,配置简便,具有高级配置选项
消息队列特性延迟消息、消息排序、死信队列较为基础的消息队列特性延迟消息、消息路由、死信队列
监控与管理强大的监控和管理工具,支持管理界面基本的监控能力,依赖外部工具强大的监控能力,包括官方和第三方管理界面
跨语言支持广泛支持多种编程语言主要支持通过 MQTT 协议进行交互的语言广泛支持多种编程语言
透明度和开放性开源,社区驱动,良好的企业支持开源,由社区驱动开源,有专业企业支持和社区版
消息持久化选项多种持久化配置,支持持久化队列和消息支持基础的消息持久化支持高级持久化配置,如持久化订阅、消息存储
消息分发策略支持多种分发策略,如循环、公平调度基本的循环分发策略支持灵活的消息分发策略,包括基于主题的负载均衡
集群能力支持复杂的集群配置,包括节点镜像、集群间同步仅支持基本的集群,不具备复杂的故障恢复和同步能力高度可扩展的集群系统,支持跨区域集群
负载均衡需要外部工具支持负载均衡通常依赖于DNS或其他外部负载均衡机制内置支持负载均衡,可通过配置实现更复杂的负载均衡策略
协议转换能力支持多协议互操作,能够在不同的协议之间转换消息专注于MQTT,没有内置的协议转换功能支持MQTT与其他几种协议的转换,适合多协议环境
延迟和吞吐量高吞吐量,延迟取决于配置和网络条件高效率,低延迟,适合小型消息设计用于高吞吐量和低延迟,优化了消息处理路径
适用规模适合中到大型企业级应用适合小型到中型项目,尤其是资源受限的环境适合大规模部署,尤其是需要管理大量IoT设备的场景
插件系统强大的插件系统,支持扩展功能和自定义开发插件支持较少,功能相对有限丰富的插件支持,可通过插件扩展或改变核心功能
文档和学习资源详尽的官方文档和广泛的社区资源文档全面,社区活跃详细的文档和专业的支持,包括在线教程和案例
许可和成本开源,也提供商业版完全开源开源社区版和商业版
数据压缩支持通过插件或客户端库实现不支持内置数据压缩支持数据压缩,减少带宽使用
事务支持支持事务,可以进行消息发布和确认的事务处理基本的QoS支持,没有完整的事务机制支持事务处理,确保消息的完整性
多租户支持通过虚拟主机支持多租户不支持多租户支持多租户,允许多个隔离的环境在同一个实例中运行
客户端连接策略支持复杂的连接策略,包括超时、限制连接数等支持基本的连接管理,如超时和连接数限制支持详尽的连接策略,包括IP黑白名单、TLS双向认证等
版本兼容性良好的向后兼容性良好的向后兼容性良好的向后兼容性,定期更新以支持新的MQTT标准
定制开发强大的插件架构允许广泛的定制开发限制性较高,插件开发相对有限支持广泛的定制开发,插件市场提供多种功能
实时监控和日志记录提供详细的监控和日志记录能力,可通过管理界面访问提供基本的日志记录功能,监控功能较为基础提供高级的实时监控和日志记录,包括客户端活动、消息流等
系统资源消耗中到高资源消耗低资源消耗中资源消耗,但在高负载情况下管理良好
灾难恢复支持集群镜像和数据复制,灾难恢复能力强基本的支持,依赖于持久化和备份支持高级的灾难恢复策略,如数据复制和自动故障转移
用户和权限管理提供详尽的用户管理和权限控制功能基本的用户认证和权限设置提供高级的用户和权限管理,支持复杂的权限配置
部署便利性支持多种部署选项,如本地、云环境和容器化部署极易部署,适合轻量级和容器化部署支持广泛的部署选项,包括Kubernetes和Docker容器化部署
开发者工具提供插件和管理工具,支持广泛的客户端库主要依赖第三方开发工具和简洁的配置管理提供丰富的开发者工具,包括Dashboard和API管理
协议扩展性支持通过插件扩展其他协议限于MQTT,不支持直接扩展为其他消息协议支持多协议扩展,可以与WebSocket、HTTP、CoAP等协议集成
云服务集成与多个云服务提供商有集成解决方案,如AWS、Azure集成较少,通常需要手动配置或使用第三方工具强大的云服务集成,特别是在IoT云平台上的应用
容错机制高级容错机制,包括队列镜像和节点复制基本的容错支持,依赖于持久化和客户端重新连接提供详细的容错和故障转移策略,支持多种备份和恢复选项
国际化和本地化支持支持多语言管理界面和文档英文为主,部分支持其他语言提供多语言支持和本地化管理界面
监控与警报系统高级监控系统,支持与外部监控工具集成,如Prometheus提供基础的监控功能,可通过插件增强内置强大的监控系统,支持实时数据分析和警报系统
支持的操作系统支持广泛的操作系统,包括Windows、Linux、MacOS主要支持Unix-like系统,Windows支持较为有限广泛支持各种操作系统,包括较新的Linux发行版
社区活跃度和支持拥有庞大且活跃的社区,提供企业级支持社区支持强,但规模较小,主要由开源贡献者维护拥有非常活跃的社区和企业级支持
性价比中到高,取决于部署复杂度和企业支持需求高性价比,适合预算有限的项目高性价比,尤其在大规模部署时

GitHub社区活跃度

以下是更新后的RabbitMQ、Mosquitto和EMQX在GitHub上的开源项目对比表格:

特性RabbitMQMosquittoEMQX
GitHub 星标 (Stars)约 12.3千约 9千约 14.1千
Forks 数量约 3.9千约 2.4千约 2.2千
开放的问题 (Open Issues)224个79个164个
Pull Requests46个2个51个
主要编程语言ErlangCErlang/Java
最近更新时间2024年11月10日2024年10月29日2024年11月10日

解释:

  • 星标:反映了项目在开源社区中的受欢迎程度。
  • Forks:表示项目代码被复制的次数,多数用于个人项目或分支项目的开发。
  • 开放的问题:显示了项目中待解决的问题数量,反映了项目活跃度及社区参与度。
  • Pull Requests:提交的代码合并请求数量,也是衡量项目活跃度的指标。
  • 主要编程语言:项目主要使用的编程语言。
  • 最近更新时间:项目最后一次更新的时间,反映了项目的维护状态。

优缺点

RabbitMQ

特性优点缺点
消息路由- 多协议支持:支持AMQP、MQTT等多种协议,灵活性高,可适应复杂的消息传递需求。
- 复杂路由:具备丰富的路由功能,适合需要不同规则和队列的场景。
- 高资源消耗:相较于Mosquitto、EMQX,在高并发MQTT场景下性能和效率稍弱。
- MQTT功能有限:作为MQTT代理时功能受限,更适合AMQP。
企业集成- 可靠性高:支持持久化和确认机制,适合对消息传递可靠性要求高的企业应用。
- 良好支持:广泛用于企业场景,且社区支持和文档较丰富。
- 复杂性:部署和配置较复杂,集成成本较高,尤其是在只需要基础MQTT功能时显得过于复杂。
适用场景复杂消息路由和企业级可靠消息传递场景,如跨协议系统或多种数据处理需求。

Mosquitto

特性优点缺点
轻量级- 资源占用少:特别适合嵌入式设备和低资源环境。
- 易于集成:安装和配置简单,适合小规模项目和测试。
- 扩展性有限:不支持分布式集群,适合小规模设备接入。
- 功能较少:缺乏高级规则引擎和复杂数据路由能力。
消息延迟- 低延迟:在低带宽环境下表现良好,适合简单消息传输需求。- MQTT 5.0支持缺乏:不完全支持最新MQTT 5.0标准的功能。
适用场景嵌入式设备、资源受限环境和小规模设备连接,适合单节点、简单数据传输的物联网应用。

EMQX

特性优点缺点
高并发- 高性能和分布式:支持大规模设备同时连接,适合高并发数据场景。
- 集群支持:具备分布式架构,可实现高扩展性。
- 资源需求较高:相比Mosquitto更占用资源,不适合低性能硬件。
- 部署复杂:配置和集群设置相对复杂。
功能- 高级规则引擎:支持数据流向灵活配置,适合实时数据处理需求。
- MQTT 5.0支持:支持最新MQTT协议,提升安全性。
- 学习成本高:对于技术要求较高的场景,维护和学习成本相对较高。
适用场景高并发、大规模物联网应用场景,如智能医疗设备的大规模数据上传和监控。

http://www.kler.cn/a/391067.html

相关文章:

  • matlab建模入门指导
  • 《MYSQL45讲》kill不掉的线程
  • MYSQL 库,表 基本操作
  • pip3 install -e .[stable]讲解
  • Java 网络编程(一)—— UDP数据报套接字编程
  • PostgreSQL 开启密码验证插件
  • MySQ怎么使用语法介绍(详细)
  • 工业主板在汽车制造中的应用
  • php 如何将数组转成对象数组
  • 人工智能(10)——————自然语言处理
  • 网络安全管理与运维服务_网络安全运维方案
  • HCIP—快速生成树协议(RSTP)实验配置
  • 剪辑视频和制作视频的软件哪个好
  • A018基于Spring Boot的民宿租赁系统
  • 2024年华为OD机试真题-关联子串-Java-OD统一考试(E卷)
  • 使用 PageHelper 在 Spring Boot 项目中实现分页查询
  • 跨子网的WinCC客户机/服务器如何实现通讯?
  • PHP API返回值格式、状态码与提示内容规范
  • ES6标准-Promise对象
  • (四)【 Python最牛 -Basemap】使用Basemap进行地图可视化
  • Flyweight(享元)
  • 如何构建低代码建模框架?探索低代码开发平台的关键要素
  • 物联网对商业领域的影响
  • OceanBase JDBC (Java数据库连接)的概念、分类与兼容性
  • A027-基于Spring Boot的农事管理系统
  • 使用kalibr_calibration标定相机(realsense)和imu(h7min)