消息队列 | 青训营笔记

57 阅读3分钟

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


1. 消息队列的前世今生

1.1、消息队列是什么

消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐高并发,并且高可用

1.2、消息队列发展历程

image.png

1.3、业界消息队列的对比
  • Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
  • RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
  • Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
  • BMQ: 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

2. 消息队列-Kafka

2.1、如何使用
  • 第一步:首先需要创建一个Kafka集群
  • 第二步:需要在这个集群中创建—个Topic,并且设置好分片数量
  • 第三步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去
  • 第四步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的Hello World
2.2、基本概念
  • Topic: Kakfa中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中
  • Cluster: Kafka的物理集群,每个集群中可以新建多个不同的topic
  • Producer:顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中
  • Consumer:消息的消费端,负责消费已经发送到Topic中的消息
  • Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐
  • Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在 partition内部严格递增。
  • Replica:每个分片有多个 Replica,Leader Replica将会从ISR中选出。
2.3、架构

image.png

2.4、帮助Kafka提高吞吐或者稳定性的功能有什么
  • Producer:批量发送、数据压缩
  • Broker:顺序写,消息索引,零拷贝
  • Consumer: Rebalance
2.5、Kafka的问题
  • 运维成本高
  • 对于负载不均衡的场景,解决方案复杂
  • 没有自己的缓存,完全依赖Page Cache
  • Controller 和Coordinator和Broker在同一进程中,大量IO会造成其性能下降

3. 消息队列-BMQ

3.1、BMQ简介

兼容Kafka协议,存算分离,云原生消息队列


4. 消息队列-RocketMQ

4.1、使用场景

例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等

还需继续更新...