什么是消息队列
消息队列(Message Queue)是一种在分布式系统中传递消息的通信方式, 它是一种异步的通信方法,可以将一个应用程序的消息传递给另外一个应用程序,以便它们之间可以进行通信和交互。 我们可以把它理解为一个信息的转发器,类似缓存,同时,从名字我们也可以看出来,消息队列的也属于队列,它实现了队列的基本特性,如先进先出(FIFO)、入队和出队操作。但与传统队列不同的是,消息队列还可以实现异步通信和解耦合的特性,支持分布式架构、高可用性、低延迟等多种应用场景 但是一个消息队列是包括以下三个部分的整体,不单单是其中的消息处理部分:
- Producer:消息生产者,负责产生和发送消息到 Broker;
- Broker:消息处理中心,负责消息存储、确认、重试等,一般其中会包含多个 Queue;
- Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理。
消息队列有什么用
消息队列具有很多用途和优点,包括:
- 应用解耦:使用消息队列可以将不同应用程序之间的通信和数据传输解耦,减少上下游应用之间的直接依赖关系。
- 异步通信:使用消息队列后,应用程序之间不需要实时通信,可以异步地发送和接收消息。这样可以提高应用程序的可伸缩性和吞吐量,减少响应时间和延迟。
- 分布式系统:在分布式系统中使用消息队列可以让不同节点之间进行可靠地通信,以协调和协同处理分布式系统中的任务和数据。
- 高可用性:通过部署多个实例,消息队列可以提供高可用性和容错性,以确保在某些实例宕机或出现故障时仍然可以正常运行。 数据缓存:消息队列还可以用于数据缓存,将热数据缓存在队列中,以减轻数据库的压力。
业界消息队列对比
- Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些 实时场景中运用较广
- Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替 换掉对应的Kafka集群
消息队列-Kafka
使用场景
- 搜索服务
- 直播服务
- 订单服务
- 支付服务
- 搜索、点赞、评论、收藏
如何使用 Kafka
- 创建集群
- 新增 Topic
- 编写生产者逻辑
- 编写消费者逻辑
基本概念
- 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 协议,存算分离,云原生消息
运维操作对比
| 具体操作 | Kafka | BMQ |
|---|---|---|
| 重启 | 需要数据复制,分钟级重启 | 重启后可直接对外服务,秒级完成 |
| 替换 | 需要数据复制,分钟级替换,甚至天级别 | 替换后可直接对外服务,秒级完成 |
| 扩容 | 需要数据复制,分钟级扩容,甚至天级别 | 扩容后可直接对外服务,秒级完成 |
| 缩容 | 需要数据复制,分钟级缩容,甚至天级别 | 缩容后可直接对外服务,秒级完成 |
Databus
- 简化消息队列客户端复杂度
- 解耦业务与 Topic
- 缓解集群压力,提高吞吐
消息队列- RocketMQ
使用场景
针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时, 也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等
基本概念
| 名称 | Kafka | RocketMQ |
|---|---|---|
| 逻辑队列 | Topic | Topic |
| 消息体 | Message | Message |
| 标签 | 无 | Tag |
| 分区 | Partition | ConsumerQueue |
| 生产者 | Producer | Producer |
| 生产者集群 | 无 | Producer Group |
| 消费者 | Consumer | Consumer |
| 消费者集群 | Consumer Grou | Consumer Grou |
| 集群控制器 | Controller | Nameserver |