EMQX vs VerneMQ | 2023 MQTT Broker 对比
引言
EMQX 和 VerneMQ 都是用 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 连接
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。
Community & Users | EMQX | VerneMQ | Notes and Links |
---|---|---|---|
GitHub Project | EMQX GitHub | VerneMQ GitHub | |
Product Created | 2012 | 2014 | |
License Mode | Apache License 2.0 | Apache License 2.0 | |
Latest Release | v5.0.21 (March 2023) | v1.12.6.2 (Nov. 2022) | |
GitHub Stars | 11.4k+ | 3k | |
GitHub Forks | 2k | 300+ | EMQX GitHub Forks VerneMQ GitHub Forks |
GitHub Commits | 14k+ | 2400+ | EMQX GitHub Commits VerneMQ GitHub Commits |
GitHub Commits (Last 12 Months) | 3000+ | 50+ | |
GitHub Issues | 3500+ | 1300+ | EMQX GitHub Issues VerneMQ GitHub Issues |
GitHub PRs | 6000+ | 600 | EMQX GitHub PRs VerneMQ GitHub PRs |
GitHub Releases | 260+ | 40 | EMQX GitHub Releases VerneMQ GitHub Releases |
GitHub Contributors | 110+ | 50 | EMQX GitHub Contributors VerneMQ GitHub Contributors |
Docker Pulls | 24M+ | 5M+ | EMQX Docker Pulls VerneMQ Docker Pulls |
功能特性
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 数据库以及云服务进行集成。
EMQX | VerneMQ | |
---|---|---|
MQTT 3.1.1 | ✅ | ✅ |
MQTT 5.0 | ✅ | ✅ |
MQTT over TLS | ✅ | ✅ |
MQTT over WebSocket | ✅ | ✅ |
MQTT over QUIC | ✅ | ❌ |
LwM2M/CoAP | ✅ | ❌ |
MQTT-SN | ✅ | ❌ |
Stomp | ✅ | ❌ |
MQTT Bridging | ✅ | ✅ |
Authentication & ACL | ✅ | ✅ |
Message Persistence | ✅ In RocksDB and external databases | ✅ In LevelDB |
WebHook | ✅ | ✅ |
Rule Engine | ✅ | ❌ |
Data Integration | ✅ | ❌ |
Cloud Service | Cloud Hosting Serverless MQTT BYOC |
❌ |
扩展性和性能
EMQX 和 VerneMQ 都基于分布式架构,具有高性能、低延迟和可扩展的特点,都能够实现单集群百万级并发连接支持。
EMQX 已有超过 30000 个集群在生产环境中部署,具有经过验证的扩展性和可靠性。最新的 EMQX 5.0 在一个 23 个节点集群的基准测试中成功实现了 1 亿 MQTT 连接。
虽然 VerneMQ 在理论和设计上应该能够很好地工作,但关于其扩展性和性能的基准测试报告很少。您可以使用 MQTT 负载测试工具(例如 emqtt-bench、emqttb 或 XMeter 云服务)对其进行基准测试。
EMQX | VerneMQ | Notes & Links | |
---|---|---|---|
Scalability | 4M MQTT connections per node 100M MQTT connections per cluster |
? | Reaching 100M MQTT connections with EMQX 5.0 |
Performance | 4 million QoS0 MQTT msgs/sec per node 800k QoS1 msgs/sec 200k QoS2 msgs/sec |
? | |
Latency | Single-digit millisecond latency in most scenarios | Up to seconds latency in some scenarios | |
Reliability | Message Persistence in RocksDB and external Database | Message Persistence in LevelDB | Highly Reliable MQTT Data Persistence Based on RocksDB VerneMQ Storage |
Clustering | 20+ nodes of cluster | ? | EMQX Cluster Scalability Vernemq - Cluster |
Elastic and Resilient scaling at runtime | ✅ | ? | |
Auto Clustering | ✅ | ? | EMQX Node Discovery and Autocluster |
Zero Downtime/Hot Upgrade | ✅ | EMQX Release Upgrade |
? 代表对于表中对比的相关条目,我们未能找到任何公开的文档或资料。
数据集成(开箱即用)
VerneMQ 对 MQTT 数据集成的支持有限。用户可以通过编写插件,将数据导入外部数据库或云服务。
EMQX 内置了基于 SQL 的规则引擎,可以轻松实现在 Broker 内实时提取、过滤、处理和转换 MQTT 消息。
EMQX 企业版可以利用规则引擎和内置的数据桥接功能与 Kafka、数据库以及云服务实现无缝的数据集成。
扩展开发
EMQX 和 VerneMQ 都支持使用钩子和插件实现灵活的扩展。此外,EMQX 还提供了多协议网关扩展,使用户能够开发新的连接协议。
Extensibility | EMQX | VerneMQ | Notes and Links |
---|---|---|---|
Hooks | ✅ | ✅ | Hooks |
Plugins | ✅ | ✅ | Plugins Plugin Development |
Plugin Hot-loading | ✅ | ✅ | |
Gateways | ✅ | ❌ | Gateway Introduction |
ExHooks/gRPC | ✅ | ❌ | gRPC Hook Extension |
可操作性和可观测性
EMQX 拥有易用的 Dashboard 和丰富的 HTTP API,支持通过 Prometheus 和 Grafana 进行监控。而 VerneMQ 部署简单、配置方便,但它在管理和监控方面还不够完善。
EMQX | VerneMQ | Notes and Links | |
---|---|---|---|
Dashboard | ✅ | ❌ | Dashboard |
Configuration | HOCON Format | Key-Value Fomat | |
HTTP API | ✅ | ✅ | REST API |
CLI | ✅ | ✅ | Command Line Interface |
Config Hot update | ✅ | ❌ | Configuration Files |
Metrics | ✅ | ✅ | Node metrics: Metrics $SYSTree Monitor - Metrics CLI |
Grafana | ✅ | ✅ | EMQX | Grafana Labs VerneMQ Node Metrics | Grafana Labs |
Cluster Metrics | ✅ | ✅ | Metrics Monitor - Metrics CLI |
Alarm Alerts | ✅ | ❌ | System Topic |
Slow Subscription Monitoring | ✅ | ❌ | Slow subscribers statistics |
Prometheus | ✅ | ✅ | Integrate with Prometheus Prometheus |
结语
简而言之,EMQX 是 2023 年在生产环境中部署 MQTT Broker 的最佳选择之一。如果想要深入了解分布式 MQTT Broker 的设计原理和实现难点,可以参考 EMQX 和 VerneMQ 在 GitHub 上的源代码。