EMQ vs. VerneMQ

  • 时间:2025-12-03 22:39 作者: 来源: 阅读:1
  • 扫一扫,手机访问
摘要:背景MQTT 是一个开放的工业标准,是一个轻量级的基于发布订阅模型的消息协议,特别适合用于一些非可靠网络环境下的小型和嵌入式设备使用,物联网行业兴盛下可选的MQTT Broker有许多,除了经典的Mosquitto和AWS、Azure,百度云、阿里云、IBM等几个提供物联网MQTT接入服务的产品外,可用于商业生产的MQTT Broker还有多款,本文将重点介绍一些EMQ与VerneMq。EMQ介绍

EMQ vs. VerneMQ


背景

MQTT 是一个开放的工业标准,是一个轻量级的基于发布订阅模型的消息协议,特别适合用于一些非可靠网络环境下的小型和嵌入式设备使用,物联网行业兴盛下可选的MQTT Broker有许多,除了经典的Mosquitto和AWS、Azure,百度云、阿里云、IBM等几个提供物联网MQTT接入服务的产品外,可用于商业生产的MQTT Broker还有多款,本文将重点介绍一些EMQ与VerneMq。




EMQ


介绍

EMQ X (简称 EMQ), 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,同时也支持 CoAP/LwM2M 一站式 IoT 协议接入。EMQ 是 5G 时代万物互联的消息引擎,适用于 IoT、M2M 和移动应用程序,可处理千万级别的并发客户端,EMQ是国人出产的一个开源Broker,已经用于许多企业生产了,文档和资料也超级齐全,除开源版本也有企业版。EMQ 作为物联网应用开发和物联网平台搭建必须用到的基础设施软件,主要在边缘和云端实现物联网设备互联与设备上云,提供物联网设备接入、协议处理、消息路由、数据存储、流数据处理等核心能力。

EMQ vs. VerneMQ


特性

EMQ 特性:

  • 物联网设备一站式连接。3G/4G/5G&NB-IoT 全网络支持,TLS/DTLS 多重网络安全,X.509 证书等多种身份认证;
  • 高并发低时延,大规模分布式。千万级并发连接,百万级消息吞吐,毫秒级消息时延。大规模分布式,高可用集群架构,弹性伸缩部署;
  • 扩展模块与插件。EMQ 内置扩展插件架构,支持以插件方式提供认证、ACL、存储接口,能超级方便的与上层物联网应用及其他 IT系统快速集成;
  • 多种物联网协议支持。完整支持 MQTT V5.0 协议规范,并下兼容 MQTT V3.1 和 V3.1.1,还可扩展支持 MQTT-SN、CoAP、LwM2M、WebSocket、STOMP或私有 TCP 等多种物联网协议;
  • 强劲的规则引擎,快速应用集成。内置强劲的规则引擎,一站式数据提取、过滤与转换。灵活集成 SQL、NoSQL、时序数据库,及 Kafka 等流处理中间件。快速应用集成与持续创新;
  • 边缘到云端,云端到跨云部署。从资源受限的边缘计算设备,到私有云、混合云和公共云之上,到跨域、跨 IDC 与跨多云,EMQ 支持物理机、VM、容器/K8S 跨平台任意部署;
  • 完全开放源码。EMQ 基于 Apache License 2.0 开源协议,无论是产品原型设计、物联网创业公司、还是大规模的商业部署,EMQ 都支持开源免费使用

EMQ 功能:

  • 完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持(QoS0, QoS1, QoS2 消息支持、持久会话与离线消息、Retained 消息与Last Will 消息支持)
  • TCP/SSL 连接支持,支持TLS/PSK 加密算法
  • MQTT/WebSocket/SSL 支持
  • HTTP 消息发布接口支持
  • 支持$SYS/# 系统主题、共享订阅 ($share/:group/topic)、客户端在线状态查询与订阅支持、延时 Publish ($delay/topic)
  • 支持客户端 ID 或 IP 地址认证,用户名密码认证,LDAP、数据库(Redis、MySQL、PostgreSQL、MongoDB)、HTTP 认证集成,浏览器 Cookie 认证
  • 基于客户端 ID、IP 地址、用户名的访问控制 (ACL)
  • 多服务器节点集群 (Cluster)、网络分区自动愈合、按分区配置节点,且集群支持 manual、mcast、dns、etcd、k8s 等多种集群发现方式
  • 消息速率限制、连接速率限制
  • 消息桥接(开源版本支持桥接EMQ X,企业版本支持Kafka、RabbitMQ、Pulsar、RocketMQ桥接)
  • 支持Stomp 协议、MQTT-SN 协议、CoAP 协议、LwM2M 协议、Stomp/SockJS 支持
  • Flapping 检测,规定客户端在指定时间内断开次数过大后将禁止客户端在必定时间内登录
  • 黑名单支持,用户可以通过相关的 HTTP API 将指定客户端加入黑名单以拒绝该客户端访问
  • 规则引擎(开源版本支持消息重新发布、桥接数据到 MQTT Broker、发送数据到 Web 服务,企业版本支持消息编解码,桥接到其它消息中间件或者持久化到数据库,并可从持久化库中获取订阅关系)
  • 数据持久化(仅企业支持持久化到MySQL、Cassandra、InfluxDB等数据库中)


企业级EMQ 一站式解决方案如下图所示

EMQ vs. VerneMQ

架构

技术架构

异步架构:EMQ X 是基于 Erlang/OTP 平台的全异步的架构,异步 TCP 连接处理、异步主题 (Topic) 订阅、异步消息发布。只有在资源负载限制部分采用同步设计,列如 TCP 连接创建和 Mnesia 数据库事务执行。EMQ X 3.0 版本中,一条 MQTT 消息从发布者 (Publisher) 到订阅者 (Subscriber),在 EMQ X Broker 内部异步流过一系列 Erlang 进程 Mailbox:

EMQ vs. VerneMQ

概念模型:EMQ X 概念上更像一台网络路由器 (Router) 或交换机 (Switch),而不是传统的企业级消息队列 (MQ)。相比网络路由器按 IP 地址或 MPLS 标签路由报文,EMQ X 按主题树 (Topic Trie) 发布订阅模式在集群节点间路由 MQTT 消息:

EMQ vs. VerneMQ

部署架构

EMQ X 集群可作为物联网接入服务(IoT Hub)部署,目前 EMQ 在青云、阿里云、AWS 等云服务提供商上均提供开箱即用的免费软件镜像对于特殊硬件平台和系统版本如树莓派、Linux ARM,可使用源码编译安装,LB (负载均衡器) 负责分发设备的 MQTT 连接与消息到 EMQ X 集群,LB 提高 EMQ X 集群可用性、实现负载平衡以及动态扩容,开源 LB有Nginx、Haproxy。

典型部署架构:

EMQ vs. VerneMQ


VerneMQ

介绍

VerneMQ 基于 Erlang/OTP 平台开发,是高性能的分布式 MQTT 消息代理它可以在硬件上水平和垂直扩展,以支持大量并发客户端,同时保持较低的延迟和容错能力,它实现了 OASIS 行业标准MQTT 协议。但 VerneMQ 还旨在通过提供一组与可扩展性、可靠性和高性能以及操作简单性相关的独特功能,将消息传递和物联网应用程序提升到一个新的水平。

EMQ vs. VerneMQ


特性

VerneMQ 特性:

  • 完全开放源码。基于 Apache License 2.0 开源协议,可免费进行商业修改和重用
  • VerneMQ 无任何形式限制、无服务节点数量限制、无时间限制、无并发限制,并可提供商业支持
  • 可随时替换VerneMQ,功能可以在任何实现 MQTT 规范的broker上运行
  • 灵活,VerneMQ 支持自定义插件,通过Lua 脚本来扩充能力
  • 采用Erlang/OTP平台开发,支持故障隔离和容错
  • 内置的可扩展指标,便于与第三方系统集成

VerneMQ 功能:

  • 完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持,支持QoS 0、QoS 1、QoS 2服务级别
  • 支持基于文、数据库(PostgreSQL、MySQL、Redis 和 MongoDB )的身份验证和授权
  • 支持数据桥接(桥接到MQTT Broker)
  • 支持系统主题( $SYS )、共享订阅
  • TCP/SSL 连接支持
  • MQTT/WebSocket/SSL 支持
  • 支持集群
  • 支持集成Graphite 、 Prometheus
  • 可扩展插件架构,支持Lua 插件脚本
  • 支持会话平衡、消息负载
  • 避免消息过载(用于系统保护),当队列中数据大于配置量,将进行消息丢弃,支持队列数据FIFO 或 LIFO 处理方式
  • 数据持久化(基于LevelDB)
  • 支持PROXY v2 协议
  • 支持webhook
  • HTTP 管理 API

EMQ vs. VerneMQ

架构

VerneMQ采用Erlang实现,Erlang 旨在支持高并发和高可用性(容错)系统,数据副本采用Plumtree协议实现,MQTT 中的保留消息是使用主题作为键存储在代理上的消息,每当客户端订阅该特定主题时,代理都会发送该消息的副本,设计和构建从 Basho 构建和打包 Riak 数据库的方式以及 Plumtree 中借鉴了许多,主题 trie 路由算法完全参考RabbitMQ MQTT 插件,采用LevelDB 作为数据持久化存储。



总结

EMQX 优势在于高并发连接与高吞吐消息的服务能力,以及物联网协议栈支持的完整性;扩展能力较强,无需过多开发,VerneMQ提供基础的并发连接与高吞吐消息的服务能力,物联网协议栈的完整性较弱仅支持 MQTT 协议;扩展能力较差,基础的业务组件支持度不够,商业成熟度不足客户量较少,缺乏开箱即用的功能插件。要求数据持久化避免节点殒机数据丢失可思考VerneMQ以及企业版EMQ X,开源版本EMQ X需要采用扩展方式实现数据持久化,但是EMQ X通过开放标准物联网协议 MQTT、CoAP 和 LwM2M 连接任何设备,基于 TLS/SSL 和 X.509 证书的认证机制确保通信安全。使用 EMQ X 企业版本集群,可以毫不费力地弹性扩展到数千万个并发的 MQTT 连接,且由于是国产化软件支持、关注度以及功能丰富程度高于VerneMQ。

对比项目

EMQ

VerneMQ

License

开源+商业版

开源+商业定制

公司/社区

EMQ

VerenMQ

开源协议

Apache License 2.0

Apache License 2.0

开发团队

杭州映云科技有限公司

Octavo Labs AG,瑞士

开发语言

Erlang

Erlang

集群架构

支持

支持

支持协议

MQTT、CoAP、MQTT-SN、WebSocket、TCP、UDP、LwM2M

MQTT WebSocket

系统性能

集群支持千万级并发,单机开源十万企业版百万并发

集群支持百万级并发

MQTT

v3.1,v3.1.1,v5.0

v3.1,v3.1.1,v5.0

边缘计算

EMQ X Edge 支持树莓派,ARM 等架构,支持数据同步到云服务 Azure IoT Hub AWS

不支持

安全与认证

TLS/DTLS、X.509证书、JWT、OAuth2.0、应用协议(ID/用户名/密码)、数据库与接口形式的认证与 ACL 功能(LDAP、DB、HTTP)

TLS/DTLS、X.509证书、配置文件形式的认证与 ACL 功能、数据库形式的认证与 ACL 功能,但支持数据库较少

数据持久化

企业版支持将消息数据持久化至外部数据库如 Redis、MySQL、PostgreSQL、MongoDB、Cassandra、Dynamo 等,开源版在内存中宕机则丢失

支持持久化至 Google LevelDB

扩展方式

Webhook、Trigger、Plugin 等,支持 Erlang 与 Lua、Java、Python 扩展开发

Webhook、Trigger、Plugin 等,支持 Erlang 与 Lua 扩展开发

数据存储

企业版

适配数据库:Redis、Mysql、PostgreSQL、MongoDB、Cassandra、OpenTSDB、TimescaleDB、InfluxDB

适配消息队列:Kakfa、RabbitMQ、Pulsar

桥接模式:支持桥接至标准 MQTT 协议消息服务

开源版支持 HTTP 将数据同步、存储

适配数据库:无,提供 Erlang 和 Lua 扩展开发

适配消息队列:无

桥接模式:支持桥接至标准 MQTT 协议消息服务

管理监控

支持可视化的 Dashboard,实现集群与节点的统一聚焦管理 支持第三方监控工具 Prometheus ,提供可视化 Grafana 界面模板

内置简单状态管理可视化界面 支持第三方监控工具 Prometheus ,可提供可视化 Grafana 界面

规则引擎

支持规则引擎,基于 SQL 的规则引擎给予 Broker 超越一般消息中间件的能力。除了在接受转发消息之外,规则引擎还可以解析消息的格式(企业版)。

规则引擎由消息的订阅,发布,确认的事件触发,根据消息的负载来执行相应的动作,降低应用开发的复杂度。

不支持

推荐阅读

MQTT vs. AMQP 协议对比

Apache Storm vs. Spark Streaming

Apache hive vs. impala 大数据生态系统中的SQL分析引擎之争

HTTP vs. MQTT 物联网通信协议对比

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】创建一个本地分支(2025-12-03 22:43)
【系统环境|】git 如何删除本地和远程分支?(2025-12-03 22:42)
【系统环境|】2019|阿里11面+EMC+网易+美团面经(2025-12-03 22:42)
【系统环境|】32位单片机定时器入门介绍(2025-12-03 22:42)
【系统环境|】从 10 月 19 日起,GitLab 将对所有免费用户强制实施存储限制(2025-12-03 22:42)
【系统环境|】价值驱动的产品交付-OKR、协作与持续优化实践(2025-12-03 22:42)
【系统环境|】IDEA 强行回滚已提交到Master上的代码(2025-12-03 22:42)
【系统环境|】GitLab 15.1发布,Python notebook图形渲染和SLSA 2级构建工件证明(2025-12-03 22:41)
【系统环境|】AI 代码审查 (Code Review) 清单 v1.0(2025-12-03 22:41)
【系统环境|】构建高效流水线:CI/CD工具如何提升软件交付速度(2025-12-03 22:41)
手机二维码手机访问领取大礼包
返回顶部