深入拆解消息队列 47 讲
许文强
前腾讯云 Kafka 技术负责人
5385 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
深入拆解消息队列 47 讲
15
15
1.0x
00:00/00:00
登录|注册

02|消息队列在架构和功能层面都包含哪些概念?

你好,我是文强。
这节课我们来了解一下消息队列在架构和功能层面的基本概念,也是想有针对性地对齐一些通用基础概念,同时让你对消息队列有一个整体认识,从而让后面的学习过程更加顺利。

什么时候会用到消息队列?

首先我们从使用者的角度,来聊聊什么情况下我们会用到消息队列。
在系统架构中,消息队列的定位就是总线和管道,主要起到解耦上下游系统、数据缓存的作用。它不像数据库,会有很多计算、聚合、查询的逻辑,它的主要操作就是生产和消费。所以,我们在业务中不管是使用哪款消息队列,我们的核心操作永远是生产和消费数据。
一般情况下,我们会在需要解耦上下游系统、对数据有缓冲缓存需求或者需要用到消息队列的某些功能(比如延时消息、优先级消息)的时候选择使用消息队列,然后再根据实际需求选型。
下面我们就用经典的订单下单流程,来简要概括下对消息队列的使用情况。
下单流程是一个典型的系统解耦消息分发的场景,一份数据需要被多个下游系统处理。另外一个经典场景就是日志采集流程,一般日志数据都很大,直接发到下游,下游系统可能会扛不住崩溃,所以会把数据先缓存到消息队列中。所以消息队列的基本特性就是高性能、高吞吐、低延时。

架构层面的基本概念

接下来我们将通过一张图示,来了解一下消息队列架构层面常见的一些基本概念。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

消息队列在架构和功能层面涵盖了许多重要概念,包括解耦上下游系统、数据缓存、延时消息和优先级消息等功能。典型应用场景包括订单下单流程和日志采集流程。在架构层面,常见概念包括Broker、Topic、Partition/Queue/MessageQueue、Producer、Consumer等,构成了消息队列的基本架构和功能特点,为实现高性能、高吞吐、低延时的消息传递提供了基础。从功能层面来看,消息队列的基本操作是生产和消费,包括顺序消息、延时消息/定时消息、事务消息、消息重试、消息回溯、广播消费、死信队列、优先级队列等功能。四款主流消息队列包括RabbitMQ、RocketMQ、Kafka、Pulsar,它们各自具有不同的特点和适用场景。对于业务消息类的场景,推荐优先选择RocketMQ,而对于流场景,优先选择Kafka。总的来说,消息队列在架构和功能层面提供了丰富的功能和应用场景,为读者提供了全面的了解和认识消息队列的基本概念和功能特点的基础。

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

全部留言(8)

  • 最新
  • 精选
  • 大胖子呀、
    多语言支持那一栏,Kafka不支持Java语言的吗?

    作者回复: 不好意思,这里的图需要更新下,这里审核不严格,是支持的。

    2023-06-28归属地:广东
    2
    5
  • aoe
    第一次遇到没有作业的一课,庆祝一下

    作者回复: 谢谢老哥~

    2023-06-27归属地:浙江
    4
  • Geek_66158e
    因为kafka第一开始的主要目标是日志处理,需要非常大的吞吐量,消息的延迟在最初的设计中没有很大优先级,所以一般是生产端批量发送,消费端一般是批量拉取,不支持push模式,而且kafka在支持消息协议,各种高级消息功能,延时消息等都兴趣不大。这方面就是rocket mq的优势。在一些中小公司,kafka的延迟和基本消息队列功能都非常够用,而且在各种开源connector,soure连接组件都很多,中小团队会优先考虑,后续加spark或者flink做分析难度不大。RocketMQ号称金融级别的可靠性和低延迟,消息队列低级高级应有尽有。

    作者回复: 讲的非常好了已经,核心基本就是这些点

    2023-07-02归属地:浙江
    3
  • 未设置
    流方向是不是只追求大吞吐量的业务场景,比如kafka的批量发送特性,而rocketMQ一般不会设置批量发送特性,更注重消息的及时性呢?

    作者回复: 是的,我理解,业务消息和流消息面临的场景是不一样的。 简单来讲,业务消息追求的是及时性、更多的功能特性、消息可追踪等。但是流消息追求的是大流量和高吞吐,对延时,功能,可追踪等其实要求不高。 比如,批量发送特性,如果是流消息,那一定需要有,没有的话吞吐打不上去,比如kafka和pulsar都支持batch语义。但是batch,会影响发送的耗时的,因为需要本地批量聚合等待。而业务消息可以不需要支持batch,所以当前rocketmq和rabbitmq就没有batch的语义。

    2023-06-27归属地:浙江
    1
  • liu
    架构层面的基本概念及联系 能通过一张图画出来吗?

    作者回复: 收到,感谢建议,我这边画一下,图片会放在原文中。

    2023-07-23归属地:上海
  • walle斌
    consumer 与分区数 看不出rocketmq的优势来,应该说并发度,rocketmq max是读队列数(分区数)* 并发线程数
    2023-08-09归属地:北京
  • 花花大脸猫
    所以是不是可以说,在选择消息队列时,如果能选择到RocketMQ,其实尽量就不需要在选择RabbitMQ来作为选项了?毕竟如果RocketMQ都涵盖RabbitMQ所有功能,并且在分布式架构上更能贴近现在的发展趋势,没有选择RabbitMQ的必要了。
    2023-08-07归属地:江苏
  • Mr.J
    还是没太懂什么是流方向
    2023-06-27归属地:北京
    2
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部