消息队列原理与实战 | 青训营笔记

107 阅读3分钟

消息队列原理与实战 | 青训营笔记

这是我参与「第五届青训营 」笔记创作活动的第13天

今天主要对消息队列原理与实战进行学习。

一、本堂课重点内容:

本次课程讲了以下几个方面:

  1. 消息队列的前世今生

  2. 消息队列-Kafka

  3. 消息队列-BMQ

  4. 消息队列-RocketMQ

二、详细知识点介绍:

1.消息队列的前世今生

消息中间件的起源很早,在1983年,Teknekron首先提出了总线思想并设计出世界上第一个消息队列软件TIB。随后就逐步诞生了各种消息队列,如下图所示: image.png 几个优秀的消息中间件:

  • Kafka:是一个分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。
  • RocketMQ:低延迟、高性能、高可靠、具有万亿级容量,在实时场景中应用较广。
  • Pulsar:是下一代云原生分布式消息流平台,它把消息、存储和轻量化函数式计算集为一体。采用存算分离的架构设计。
  • BMQ:和Pulsar类似,初期主要是用于承接高吞吐的离线业务场景,后面逐步替换掉对应的Kafka集群。

2.消息队列-Kafka

Kafka的使用场景有:搜索服务、直播服务、订单服务、支付服务、用户行为(搜索,点赞,评论,收藏)。我们使用Kafka时的步骤如下:创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑

Kafka中的一些基本概念:

  • Topic:逻辑队列,不同Topic可以建立不同的Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic
  • Producer:生产者,负责将业务消息发送到Topic中
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉

Kafka的架构图: image.png

Kafka存在的问题:

  • 1.运维成本高
  • 2.对于负载不均衡的场景,解决方案复杂
  • 3.没有自己的缓存,完全依赖Page Cache
  • 4.Controller 和Coordinator和Broker 在同一进程中,大量IO会造成其性能下降

3.消息队列-BMQ

BMQ是一个兼容Kafka协议,存算分离,云原生消息队列。其架构图如下: image.png BMQ框架是字节内部研发的一款消息队列中间件框架,逐步替换已有的Kafka集群。

4.消息队列-RocketMQ

RocketMQ主要针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等。RocketMQ和Kafka的基本概念对照图: image.png RocketMQ有着其他中间件没有的高级特性,如事务消息、重试和死信队列以及延迟队列。 RocketMQ的架构图如下: 数据流也是通过Producer发送给Broker集群,再由Consumer进行消费Broker节点有Master和Slave的概念,NameServer为集群提供轻量级服务发现和路由。 image.png

三、课后个人总结:

通过对消息队列原理与实战的学习,我认识了消息中间件的作用和用途,消息队列是分布式系统中完成消息的发送和接收的基础软件,目前市面上主要使用的Kafka、BMQ、RocketMQ等消息中间件。如果我们有一个数据需要进行迁移或者请求并发过多的时候,比如你有100W的并发请求订单,我们可以在这些订单入库之前,把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。消息中间件负责数据的传递、存储和分发,所以性能上要高于普通服务和技术。