MQTT(Message Queuing Telemetry Transport)是一个即时通讯协议,由IBM开发。它支持所有平台,可以将所有联网的物品和外部连接起来,被用于传感器和致动器的通信协议。
MQTT的主要特点包括:
- 使用发布/订阅消息模式,提供一对多的消息发布,从而解除应用程序耦合。这一点类似于XMPP,但MQTT的信息冗余远小于XMPP。
- 对负载内容进行屏蔽的消息传输。
- 使用TCP/IP提供网络连接。主流的MQTT是基于TCP连接进行数据推送的,但也有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同。
- MQTT能够容忍不稳定网络,并在发生断开等故障时恢复。
- MQTT是专门为低功耗目标而设计的,而HTTP的设计没有考虑此因素,因此增加了功耗。
- MQTT支持数百万个客户端的连接,例如IBM提供的IBM MessageSight服务器经过测试能处理多达100万个通过MQTT并发连接的设备。
- MQTT有三种消息发布的服务质量等级:至多一次、只有一次和分发的消息可能丢失或重复。
一、开源可选MQTT BROKER
支持功能对比图
二、选型
2.1 项目需求
- 可扩展性、安全性、可靠性、高性能
- 支持mqtt5.0、mqtt3.1.1
- 账号/密码连接
- 支持QoS 0、QoS 1、QoS 3
2.2 选取符合条件broker分析
EMQ X
EMQ是一个基于Erlang语言的开源mqtt服务器,目前来看是开源的最好的mqtt服务器,也是国内开源的mqtt服务器,优点是功能全面,文档齐全,社区活跃,有很好的支持,缺点是因为erlang语言,对于其他语言的开发者自己扩展有一定难度。官方文档是:EMQ(开源)
优点
- MQTT 3.1 / 3.1.1 / 5.0
- 完整QoS支持
- 单节点100万连接
- 分布式集群或桥接(还支持mosquitto桥接、rsmb桥接)、脑裂自动愈合
- LDAP, MySQL, PostgreSQL, Redis, MongoDB等验证插件
- 完整连接方式支持
- API、Web监控界面
- 本地共享订阅(EMQ2.0)、集群共享订阅(EMQ3.0)
- $SYS统计信息主题
- 自定义插件开发
缺点
- 安装和配置相对复杂
- CPU 和内存使用率较高
- 开源版本不支持持久化
Mosquitto
Mosquitto 是一个广泛使用的开源 MQTT Broker,隶属于 Eclipse 基金会,遵循 Eclipse 公共许可证(EPL/EDL 许可证)。截至 2023 年 3 月,它在 GitHub 上拥有超过 7k 个 Star。Mosquitto 支持 MQTT 5.0、3.1.1、3.1,并且提供了对 SSL/TLS 和 WebSocket 的支持。
优点
- 轻量级、占用资源少
- MQTT 3.1 / 3.1.1 / 5.0
- 简单易用
缺点
- 不支持多线程和集群
- 不支持在云端部署
VerneMQ
vemeMQ 项目于 2014年启动,最由 Erlo GmbH 开发,它是第二个用 EdandOTP 编写的 MQTT Brokel, Apache 20 许可证。
在架构设计上, VemeMQ 支持使用LevelDB 进行 MQTT 消息持久化,并采用基于 Plumtree 库的集群架构,该库实现了 Epidemic broadcast Trees 算法.
然而,尽管 Plumtee 集群架构以理论上看很完美,但其可行性尚未得到证明,VemeMQ 团队和社区花费了多年时间尝试解决系统存在的问题,如网络分裂、数据不一致和崩溃恢复等,但是取得的成果有限。
优点
- 高可用
- 水平可扩展性
- 支持消息持久化
缺点
- 未经验证的集群架构
- 文档不足
- 企业功能有限
- 缺少开发维护
HiveMQ
HiveMQ是企业级MQTT Broker,提供高性能、高可用、高扩展、高安全性的企业级服务。它是纯Java实现的。Apache 20 许可证。
优点
- MQTT 3.1 / 3.1.1 / 5.0
- 完整QoS支持
- 分布式集群支持
- 持久化支持
- 流量控制支持
- 完整连接方式支持
- IPv6支持
- 集群共享订阅
- $SYS统计信息主题
- JMX性能监控
- 日志打印
缺点
- 没有开源源码
- 企业功能需要付费
三 结语
通过前文的介绍和对比,我们可以看到,每个 MQTT Broker 都有其独特的优点,适合不同的部署场景。EMQX 具有高扩展性和企业级功能,适合在云端部署,EMQX 社区活跃。
四 其它
- mqtt官方整理的开源Broker简要列表
- mqtt官方整理的开源Broker详细介绍
- mqtt官方整理的开源Broker特性和性能对比
- emqx 官网 https://www.emqx.io/docs/zh/latest/
- 公众号: java程序猿技术