消息队列高手课
李玥
美团高级技术专家
52199 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
进阶篇 (21讲)
消息队列高手课
15
15
1.0x
00:00/00:00
登录|注册

26 | MQTT协议:如何支持海量的在线IoT设备?

思考题
MQTT集群设计
MQTT产品选择
MQTT特点
MQTT协议
物联网概念
MQTT协议

该思维导图由 AI 生成,仅供参考

你好,我是李玥。
IoT,也就是物联网,一直是最近几年技术圈非常火的一个概念,并且,随着 5G 大规模商用,IoT 还将持续火下去。
那到底什么是物联网呢?物联网这个词儿,它的含义还不那么直观,但你看它的英文:IoT,也就是 Internet of Things 的缩写,Things 这个单词,我们知道,它在英语里面几乎可以指代一切。翻译成中文,我个人觉得,“东西”这个词儿比较贴切。那物联网,就可以理解为把所有东西都用互联网给连接起来。
这里面不仅仅包括像电脑、手机这样的智能设备,还包括一些已经智能化的传统设备,比如汽车、冰箱、路边的摄像头等等,将来还将包括更多的、各种各样的物品:比如水杯、衣服、工业用的各种设备和工具等等,也就是所谓的万物互联。所以,IoT 它的未来绝对是大有可期的。
那这些物联网设备,它要实现互相通信,也必须有一套标准的通信协议,MQTT 就是专门为物联网设备设计的一套标准的消息队列通信协议。使用 MQTT 协议的 IoT 设备,可以连接到任何支持 MQTT 协议的消息队列上,进行通信。
这节课,我们就一起来聊一聊 MQTT 协议,以及如何把 MQTT 应用到生产系统中去。

MQTT 和其他消息队列的传输协议有什么不同?

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

MQTT协议是为物联网设备设计的一套标准的消息队列通信协议,采用了发布-订阅的消息模型,面临着支撑海量IoT设备在线的挑战。在选择MQTT产品时,需要考虑其是否能支撑海量客户端和主题。对于海量在线的IoT设备系统,选择合适的MQTT产品至关重要。文章介绍了MQTT集群的架构设计,通过前置的Proxy集群来解决海量连接、会话管理和海量主题的问题。Proxy负责在Broker和客户端之间转发消息,将海量客户端连接收敛为少量的Proxy与Broker之间的连接,解决了海量客户端连接数的问题。维护会话的实现原理类似于Tomcat维护HTTP会话。对于海量主题,可以在后端部署多组Broker小集群,每个小集群分担一部分主题。总的来说,选择适用的MQTT产品和构建合理的集群架构对于支持海量在线的IoT设备至关重要。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《消息队列高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • Geek_e7834d
    如果iot设备的数据不多 可否把多个设备的主题合在一起。发送时候是发给一个主题 消费时候通过一个filter过滤出来。这样就可以减少主题数目了。另外 一个kafka集群能支持的topic上限一般是多少?高于这个上限就要分成不同的集群是吗?zookeeper加了observer之后 集群里最多能有多少台zookeeper呢?

    作者回复: 关于Kafka集群能支持多少个topic,这个取决的因素很多,集群的节点数量,集群规模大小,zk的配置等等,有个关于这个问题的测试,你可以看一下:https://blogs.apache.org/kafka/entry/apache-kafka-supports-more-partitions zk的节点数量,一般最多配置成7个,observer的场景实际上并不常用,只有一种场景才需要用到Observer:你有海量的zk客户端,大部分和zk的交互都是读操作,这种情况下才需要用Observer来支撑海量的客户端数量。 增加ZK的节点数量并不能提升ZK的性能,写性能反而会降低,读性能也不会随着节点数量有提升,但是,节点数越多,可以支撑更多的并发读,只有这块儿性能会有提升。

    2019-10-19
    8
  • COLDLY
    请问RabbitMQ,AMQP、MQTT这三者的关系是什么啊。最近公司项目涉及, 很迷惑,求解答

    作者回复: RabbitMQ:一个开源的消息队列产品; AMQP和MQTT都是一种消息队列客户端与服务端交互的标准协议,类似于HTTP一样,是一种协议。 RabbitMQ实现了AMQP协议。

    2020-02-08
    2
    7
  • Peter
    交作业: 生产者时序图:https://github.com/PeterLu798/MQ/blob/master/src/com/lbj/mq/iot/%E7%94%9F%E4%BA%A7%E8%80%85%E6%97%B6%E5%BA%8F%E5%9B%BE.png 消费者时序图: https://github.com/PeterLu798/MQ/blob/master/src/com/lbj/mq/iot/%E6%B6%88%E8%B4%B9%E8%80%85%E6%97%B6%E5%BA%8F%E5%9B%BE.png

    作者回复: 对认真完成作业的同学点个赞! 对于消费时序图,Metadata中的数据结构是什么样呢?希望同学能细化一下。

    2019-11-05
    4
  • 山头
    老师,什么时候亮亮客户端如何从broke拉取消息,for,websocket,长链接,都是如何实现的,辛苦讲讲,不然没法写demo

    作者回复: 对于我们这节课的作业,实现这个Proxy你不需要自己写一个MQ的客户端,完全可以使用已有的客户端。 比如,你的Broker是RocketMQ,Proxy可以集成RocketMQ的客户端与Broker通信就可以了。

    2019-09-25
    4
    2
  • 赵雍
    请问老师,如何通过app端同步发送命令控制设配,比如通过app开锁共享单车? mqtt 能否实现同步发送命令的场景? 如何实现?

    作者回复: MQTT是可以实现下发命令到IoT设备上的,通常的做法是,每个IoT设备都为自己建立一个专属的Topic并且订阅这个Topic,Server端需要给指定设备发送命令的时候,直接往对应的Topic上发消息就可以了。

    2020-06-18
    3
  • 游弋云端
    Proxy相当于管理了多个消息队列的小集群,对外体现为一个大的消息队列集群,分而治之,这个方案赞一个!
    2019-09-26
    18
  • 业余草
    mqtt是云厂商必争之地,作为小公司,用好云厂商提供的技术即可,没资源造轮子!
    2019-09-25
    5
  • Bumblebee
    目前国产的emqx挺好用的
    2022-01-21
    1
    3
  • ifelse
    在物联网应用场景中,IoT 设备性能差,网络连接不稳定。服务端面临的挑战主要是,需要支撑海量的客户端和主题。--记下来
    2023-01-06归属地:浙江
  • Confidant.
    请教一下,这样设计会有大量的proxy,那客户端是如何知道该对哪一个proxy发起请求呢
    2021-06-18
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部