EMQX vs VerneMQ | 2023 MQTT Broker 对比

简介: 本文深入对比了EMQX和VerneMQ两个MQTT Broker的功能特性、设计架构等,让读者可以更好地了解它们的特点,以便为物联网项目做出合适选择。

EMQX vs VerneMQ —2023 MQTT Broker 对比 图1.png

引言

EMQXVerneMQ 都是用 Erlang/OTP 开发的高性能、分布式开源 MQTT Broker,以其稳定性、容错性和扩展性著称。

EMQX 是目前全球最受欢迎的 MQTT Broker 之一,而 VerneMQ 项目近年来却没有积极地开发和维护。

本文是《2023 年 MQTT Broker 对比》系列博客的第四篇,我们将对这两个 Broker 进行简要的对比分析。

EMQX 简介

EMQX 于 2012 年在 GitHub 发布,遵循 Apache 2.0 许可证。它旨在以百万级的并发连接为需要高可扩展性 MQTT Broker 的应用场景提供解决方案。

EMQX 是目前全球最具扩展性的 MQTT Broker。通过采用基于 Mria+RLOG 的分布式架构,最新版本 EMQX 5.0 单个集群可支持至多 23 个节点,能够承载高达 1 亿的 MQTT 并发连接。

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

MQTT Cluster 图2.png

EMQX 提供了丰富的企业功能、数据集成、云托管服务以及来自 EMQ 公司的商业支持。多年来,EMQX 凭借其卓越的性能、可靠性和扩展性,在大型企业、创业公司和个人用户中赢得了广泛的认可,被广泛应用于物联网、工业物联网、智能汽车和电信等各个领域。

优点:

  • 支持大规模部署
  • 高可用
  • 水平可扩展性
  • 高性能和高可靠
  • 提供丰富的企业功能
  • 率先引入 MQTT over QUIC

Cons: 缺点:

  • 难以有效管理
  • 配置较为复杂
  • 日志不易理解

VerneMQ 简介

VerneMQ 项目于 2014 年启动,最初由 Erlio GmbH 开发。它是第二个用 Erlang/OTP 编写的 MQTT Broker,遵循 Apache 2.0 许可证,部分代码参考了 EMQX 项目。

在架构设计上,VerneMQ 支持使用 LevelDB 进行 MQTT 消息持久化,并采用基于 Plumtree 库的集群架构,该库实现了 Epidemic Broadcast Trees 算法。

然而,尽管 Plumtree 集群架构从理论上看很完美,但其可行性尚未得到证明。VerneMQ 团队和社区花费了多年时间尝试解决系统存在的问题,如网络分裂、数据不一致和崩溃恢复等,但是取得的成果有限。

目前,该项目已不再积极地开发和维护,在过去的一年中只有大约 50 次提交。

优点:

  • 高可用
  • 水平可扩展性
  • 支持消息持久化

Cons: 缺点:

  • 未经验证的集群架构
  • 文档不足
  • 企业功能有限
  • 缺少开发维护

社区情况

EMQX 和 VerneMQ 项目都托管在 GitHub 上。EMQX 始于 2012 年,是最早且目前 Star 数最多的 MQTT Broker 之一,拥有 11.4k Stars。VerneMQ 项目创建于 2014 年,目前有 3k Stars。

表格1.png

功能特性

EMQX 和 VerneMQ 都完整支持 MQTT 3.1.1 和 MQTT 5.0,支持 MQTT over WebSocket 和 SSL/TLS 加密。同时它们都支持多种身份认证方式,包括用户名密码、JWT、LDAP 和 OAuth 2.0。

EMQX 支持多个协议网关,包括 LwM2M/CoAP、MQTT-SN 和 Stomp。EMQX 5.0 引领了 MQTT over QUIC 技术,MQTT over QUIC 通过多路复用、更快的连接建立和迁移等特性,有望成为下一代 MQTT 标准。

此外,EMQX 还提供了一系列管理和集成功能,如 HTTP API、WebHook 和规则引擎。通过这些内置的数据桥接功能可以轻松地与 Kafka、SQL、NoSQL 数据库以及云服务进行集成。

表格2.png

扩展性和性能

EMQX 和 VerneMQ 都基于分布式架构,具有高性能、低延迟和可扩展的特点,都能够实现单集群百万级并发连接支持。

EMQX 已有超过 30000 个集群在生产环境中部署,具有经过验证的扩展性和可靠性。最新的 EMQX 5.0 在一个 23 个节点集群的基准测试中成功实现了 1 亿 MQTT 连接。

虽然 VerneMQ 在理论和设计上应该能够很好地工作,但关于其扩展性和性能的基准测试报告很少。您可以使用 MQTT 负载测试工具(例如 emqtt-benchemqttbXMeter 云服务)对其进行基准测试。
表格3.png

? 代表对于表中对比的相关条目,我们未能找到任何公开的文档或资料。

数据集成(开箱即用)

VerneMQ 对 MQTT 数据集成的支持有限。用户可以通过编写插件,将数据导入外部数据库或云服务。

EMQX 内置了基于 SQL 的规则引擎,可以轻松实现在 Broker 内实时提取、过滤、处理和转换 MQTT 消息。

EMQX 企业版可以利用规则引擎和内置的数据桥接功能与 Kafka、数据库以及云服务实现无缝的数据集成。

表格4.png

扩展开发

EMQX 和 VerneMQ 都支持使用钩子和插件实现灵活的扩展。此外,EMQX 还提供了多协议网关扩展,使用户能够开发新的连接协议。

表格5.png

可操作性和可观测性

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

表格6.png

结语

简而言之,EMQX 是 2023 年在生产环境中部署 MQTT Broker 的最佳选择之一。如果想要深入了解分布式 MQTT Broker 的设计原理和实现难点,可以参考 EMQXVerneMQ 在 GitHub 上的源代码。

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

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

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6月前
|
消息中间件 网络协议 RocketMQ
消息队列 MQ产品使用合集之broker开启proxy,启动之后producer生产消息始终都只到一个broker,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 存储 监控
消息队列 MQ使用问题之客户端重启后仍然出现broker接收消息不均匀,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
EMQ
|
5月前
|
传感器 人工智能 安全
EMQX 与 MQTT: AI 大模型时代的分布式数据中枢
在以数据为核心的 AI 时代,基于 MQTT 协议的消息服务器 EMQX 能帮助企业更好的利用人工智能和机器学习模型,是智能化系统中核心的数据基础软件。
EMQ
267 14
|
4月前
|
消息中间件 SQL 监控
RocketMQ 5.3.0 版本中 Broker IP 配置为 IPv6 的情况
【8月更文第28天】RocketMQ 是一款分布式消息中间件,支持多种消息发布和订阅模式。在 RocketMQ 5.3.0 版本中,Broker 的配置文件 `broker.conf` 允许配置 IPv6 地址。当 Broker 的 `brokerIP1` 配置为 IPv6 地址时,会对 Broker 的启动、消息推送和状态监控等方面产生影响。本文将探讨如何在 RocketMQ 中配置 IPv6 地址,并检查 Broker 的状态。
277 0
|
5月前
|
消息中间件 运维 RocketMQ
MetaQ/RocketMQ 原理问题之slave broker是从master同步信息的问题如何解决
MetaQ/RocketMQ 原理问题之slave broker是从master同步信息的问题如何解决
|
6月前
|
消息中间件 监控 应用服务中间件
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
195 1
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
|
5月前
|
消息中间件 搜索推荐 RocketMQ
消息队列 MQ使用问题之如何将一个主题的多个分区分布到不同的Broker上
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 存储 RocketMQ
MetaQ/RocketMQ 原理问题之MetaQ中Broker的数据同步方式的问题如何解决
MetaQ/RocketMQ 原理问题之MetaQ中Broker的数据同步方式的问题如何解决
|
6月前
|
消息中间件 设计模式 网络安全
消息队列 MQ操作报错合集之broker启用controller配置时,遇到报错,是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
113 1
|
6月前
|
消息中间件 Java Shell
消息队列 MQ产品使用合集之启动broker&proxy的时候会报错,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。