消息队列原理与实战 | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第13天
今天主要对消息队列原理与实战进行学习。
一、本堂课重点内容:
本次课程讲了以下几个方面:
-
消息队列的前世今生
-
消息队列-Kafka
-
消息队列-BMQ
-
消息队列-RocketMQ
二、详细知识点介绍:
1.消息队列的前世今生
消息中间件的起源很早,在1983年,Teknekron首先提出了总线思想并设计出世界上第一个消息队列软件TIB。随后就逐步诞生了各种消息队列,如下图所示:
几个优秀的消息中间件:
- Kafka:是一个分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。
- RocketMQ:低延迟、高性能、高可靠、具有万亿级容量,在实时场景中应用较广。
- Pulsar:是下一代云原生分布式消息流平台,它把消息、存储和轻量化函数式计算集为一体。采用存算分离的架构设计。
- BMQ:和Pulsar类似,初期主要是用于承接高吞吐的离线业务场景,后面逐步替换掉对应的Kafka集群。
2.消息队列-Kafka
Kafka的使用场景有:搜索服务、直播服务、订单服务、支付服务、用户行为(搜索,点赞,评论,收藏)。我们使用Kafka时的步骤如下:创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑。
Kafka中的一些基本概念:
- Topic:逻辑队列,不同Topic可以建立不同的Topic
- Cluster:物理集群,每个集群中可以建立多个不同的Topic
- Producer:生产者,负责将业务消息发送到Topic中
- Consumer:消费者,负责消费Topic中的消息
- ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉
Kafka的架构图:
Kafka存在的问题:
- 1.运维成本高
- 2.对于负载不均衡的场景,解决方案复杂
- 3.没有自己的缓存,完全依赖Page Cache
- 4.Controller 和Coordinator和Broker 在同一进程中,大量IO会造成其性能下降
3.消息队列-BMQ
BMQ是一个兼容Kafka协议,存算分离,云原生消息队列。其架构图如下:
BMQ框架是字节内部研发的一款消息队列中间件框架,逐步替换已有的Kafka集群。
4.消息队列-RocketMQ
RocketMQ主要针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等。RocketMQ和Kafka的基本概念对照图:
RocketMQ有着其他中间件没有的高级特性,如事务消息、重试和死信队列以及延迟队列。
RocketMQ的架构图如下: 数据流也是通过Producer发送给Broker集群,再由Consumer进行消费Broker节点有Master和Slave的概念,NameServer为集群提供轻量级服务发现和路由。
三、课后个人总结:
通过对消息队列原理与实战的学习,我认识了消息中间件的作用和用途,消息队列是分布式系统中完成消息的发送和接收的基础软件,目前市面上主要使用的Kafka、BMQ、RocketMQ等消息中间件。如果我们有一个数据需要进行迁移或者请求并发过多的时候,比如你有100W的并发请求订单,我们可以在这些订单入库之前,把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。消息中间件负责数据的传递、存储和分发,所以性能上要高于普通服务和技术。