走进消息队列 | 青训营

70 阅读4分钟

什么是消息队列

消息队列(Message Queue)是一种在分布式系统中传递消息的通信方式, 它是一种异步的通信方法,可以将一个应用程序的消息传递给另外一个应用程序,以便它们之间可以进行通信和交互。 我们可以把它理解为一个信息的转发器,类似缓存,同时,从名字我们也可以看出来,消息队列的也属于队列,它实现了队列的基本特性,如先进先出(FIFO)、入队和出队操作。但与传统队列不同的是,消息队列还可以实现异步通信和解耦合的特性,支持分布式架构、高可用性、低延迟等多种应用场景 但是一个消息队列是包括以下三个部分的整体,不单单是其中的消息处理部分:

  • Producer:消息生产者,负责产生和发送消息到 Broker;
  • Broker:消息处理中心,负责消息存储、确认、重试等,一般其中会包含多个 Queue;
  • Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理。

消息队列有什么用

消息队列具有很多用途和优点,包括:

  • 应用解耦:使用消息队列可以将不同应用程序之间的通信和数据传输解耦,减少上下游应用之间的直接依赖关系。
  • 异步通信:使用消息队列后,应用程序之间不需要实时通信,可以异步地发送和接收消息。这样可以提高应用程序的可伸缩性和吞吐量,减少响应时间和延迟。
  • 分布式系统:在分布式系统中使用消息队列可以让不同节点之间进行可靠地通信,以协调和协同处理分布式系统中的任务和数据。
  • 高可用性:通过部署多个实例,消息队列可以提供高可用性和容错性,以确保在某些实例宕机或出现故障时仍然可以正常运行。 数据缓存:消息队列还可以用于数据缓存,将热数据缓存在队列中,以减轻数据库的压力。

业界消息队列对比

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

消息队列-Kafka

使用场景

  • 搜索服务
  • 直播服务
  • 订单服务
  • 支付服务
  • 搜索、点赞、评论、收藏

如何使用 Kafka

  1. 创建集群
  2. 新增 Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑

基本概念

  • Topic:逻辑队列,不同 Topic可以建立不同的Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic
  • Producer:生产者,负责将业务消息发送到 Topic
  • Consumer:消费者,负责消费 Topic 中的消
  • ConsumerGroup:消费者组,不同组 Consumer 消费进度互不干
  • Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在 partition
  • Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出。
  • ZooKeeper:负责存储集群元信息,包括分区分配信息等

问题总结

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

消息队列- BMQ

BMQ简介

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

运维操作对比

具体操作KafkaBMQ
重启需要数据复制,分钟级重启重启后可直接对外服务,秒级完成
替换需要数据复制,分钟级替换,甚至天级别替换后可直接对外服务,秒级完成
扩容需要数据复制,分钟级扩容,甚至天级别扩容后可直接对外服务,秒级完成
缩容需要数据复制,分钟级缩容,甚至天级别缩容后可直接对外服务,秒级完成

Databus

  1. 简化消息队列客户端复杂度
  2. 解耦业务与 Topic
  3. 缓解集群压力,提高吞吐

消息队列- RocketMQ

使用场景

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

基本概念

名称KafkaRocketMQ
逻辑队列TopicTopic
消息体MessageMessage
标签Tag
分区PartitionConsumerQueue
生产者ProducerProducer
生产者集群Producer Group
消费者ConsumerConsumer
消费者集群Consumer GrouConsumer Grou
集群控制器ControllerNameserver