消息队列 | 青训营笔记

57 阅读2分钟

消息队列

消息队列=保存消息的容器,本质是一个支持高吞吐,高并发,高可用的队列。

1. 前世今生

发展历程简要回顾

image.png

业界常用的消息队列

Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下表现出色

BMQ:存算分离

RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在实时场景中运用较广

2. Kafka

使用步骤

创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑

基本概念

  • Topic:逻辑队列,一个业务的所有数据均保存在此topic中
  • Cluster:物理集群,每个集群可建立多个Topic
  • Producer:将业务消息发送给Topic
  • Consumer:消息Topic中的消息
  • ConsumerGroup:不同组的Consumer消费进度互不干扰

特性

1、高吞吐

2、支持数据批量发送和拉取

3、零拷贝,减少IO操作步骤

缺点

1、运维成本高

2、对于负载不均衡的场景,解决方案复杂

3、没有自己的缓存,完全依赖page cache

4、controller和coordinator和broker在同一进程中,大量IO会造成性能下降

3. BMQ

BMQ简介

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

BMQ架构图

BMQ中的生产者、消费者与Kafka等同,而与Broker之间加入了Proxy;底层新增分布式文件存储系统;生产者生产消息后,proxy转交给broker写入;消费者读取消息时,proxy转发给分布式存储系统读取。

对于重启、替换、扩容、缩容,Kafka至少需要分钟级别,BMQ实现秒级

4. RocketMQ

主要应用场景

针对电商业务线,业务涉及注册、订单、库存、物流...... 也涉及业务错峰时刻,秒杀活动、周年庆......

基本概念

image.png

RocketMQ架构

image.png