【MQTT学习笔记一】物联网中为什么选择MQTT,和HTTP,CoAP,kafka的对比

时间:2024-03-13 18:41:33

  最近在学习MQTT,看了许多的文档,也看了一些相关Python代码,收获很大。这里记录下来,一方面自己用来复习,另一方面希望可以帮助到后面新接触MQTT的小伙伴。

  网上看到了一个IoT应用的协议体系,觉得很好,先拿出来分享下(侵删):

【MQTT学习笔记一】物联网中为什么选择MQTT,和HTTP,CoAP,kafka的对比

  从上图可以看出,HTTP/MQTT/CoAP都是位于OSI网络协议的应用层。以下是这几个协议的区别。

1. HTTP(超文本传输协议)

基于TCP协议,采用C/S模型,会话方式是请求/应答,并且这些会话都是客户端发起,缺少服务器通知客户端的机制,在需要通知的场景,客户端应用需要不断地轮询服务器。

对于嵌入式设备来说,需要传输的数据太多,太重,不够灵活。

2. WebSockets

这个是在HTTP的基础上发展而来,提供了C/S的双向通信,取代了HTTP的双向通讯轮询机制。但是更多的是应用于Web浏览器应用。

MQTT over WebSockets为MQTT消息在Web browser的展示提供了接口。

3. CoAP(受限制的应用协议)

基于UDP协议,RESET架构,主要是server和client之间的一对一消息传递协议。主要用于资源受限型的设备和低功耗无线局域网环境。内置发现支持和内容协商,不需要事先知道消息格式。区别于MQTT的长连接,CaAP采用无连接方式。

4. MQTT(消息队列遥测传输)

基于TCP协议,采用二进制的发布/订阅模式。这个最早是IBM开发的一个即时通讯协议,是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。是为了物联网场景而优化,提供多个QoS,还有层级主题和遗嘱等特性。

5. kafka

kafka其实和MQTT不是一个东西,但是都采用发布/订阅模式。Kafka是已经实现的开源流处理平台。主要用于消息系统,行为跟踪和日志手机。为数据集成的场景,通过分布式架构提供消息处理,高容错的方式存储海量数据流,包装数据流的顺序等特性。服务质量只有1,减少确认从而提高并发。

MQTT broker 用来快速的对大量物联网设备发来的消息做接收处理响应,而Kafka 对这些大量的数据做采集存储,交给数据分析人员来分析处理消息,这一流程或许会成为未来物联网云平台的一大通用范式。

kafka参考:https://blog.csdn.net/yeshenzzrff/article/details/79021479