MQTT Broker选型

MQTT Broker选型

一、简述

MQTT协议是IBM开发的一个即时通讯协议,目前已经是物联网的一个重要组成部分,该协议支持所有平台,是一个主要作为物联网设备消息传输的通信协议。

目前很多公有云平台都已经对MQTT协议有了很好的支持,例如阿里的LMQ,腾讯的IoT-MQ等,这里主要讨论一些开源的MQTT协议产品。

二、EMQ(Erlang)

EMQ是一个基于Erlang语言的开源mqtt服务器,目前来看是开源的最好的mqtt服务器,也是国内开源的mqtt服务器,优点是功能全面,文档齐全,社区活跃,有很好的支持,缺点是因为erlang语言,对于其他语言的开发者自己扩展有一定难度。官方文档是:EMQ

三、mosquitto(C++)

mosquitto是基于c++的开源mqtt服务器,开源社区较活跃,功能较齐全,缺点也是因为采用c++实现,对于其他语言的开发者很难扩展。mosquitto

四、moquette(Java)

moquette是基于java开发的mqtt服务器。开源社区较活跃,采用java实现,功能较齐全,也是我在实际工作中参考最多的一个mqtt开源broker。Moquette:https://github.com/andsel/moquette

五、选型

上面主要介绍了三个开源的mqtt broker,这三个产品也是应用比较多的,在实际架构设计时,还要考虑团队人员,技术储备,可运维,可用性,可靠性,性能等,这里简单比较一下:

  • EMQ是开源社区最活跃的,功能最全,但是“好功能”是需要收费的,同时erlang语言也很难维护和二次开发,mosquitto与emq相似,这两个产品也是mqtt开源broker里应用最广,功能最全,性能较好的(实际需要自行测试),当然缺点是对于其它语言的开发者很难进行扩展,

  • moquette是我了解最多的,moquette虽然是java开源mqtt broker里最活跃的,也是目前java实现中功能最全的一个,但是缺点也很明显:

    1. 没有集群实现,无高可用,高可靠,基本决定了无法投入生产~

    2. 消息的持久化实现不好,在消息持久化时,连接数,消息的tps这些性能重要指标都很差

    3. 没有运维功能。

  • 至于其他的Java实现的mqtt broker,例如activemq等,性能太低,可用性和可靠性也不好,基本无法在生产中实现,所以基本不用考虑。

六、JMQTT

这里我开源了一个以Java语言实现的MQTT协议的Broker,主要基于Netty实现。代码风格主要参考了阿里的RocketMQ,主要是想实现一个基于Java语言的高性能,高可用,有一定可靠性,高扩展,插件化的MQTT Broker。

目前该产品的主要规划有以下:

  1. 实现mqtt协议所有功能

  2. 数据可持久化,实现高可靠

  3. 集群化,可根据需求横向扩展,实现高可用

  4. 插件化开发,可以很方便的对接其它消息存储插件及集群插件等

  5. 可运维,提供http方式的管理接口等

  6. 多协议,不限于mqtt支持的websocket,ssl/tls,还包括与coap协议互通,http协议互通等

  7. 数据上云,可通过RocketMQ,Kafka等传输到数据分析平台中

该产品目前仍然在开发中,目前实现了大部分mqtt协议的功能,还有很多功能亟待开发和实现,欢迎大家参与该项目的开发。Jmqtt:https://github.com/Cicizz/jmqtt

你可能感兴趣的:(java,iot)