Skip to content

消息队列

1. 消息队列前世今生

消息队列(MQ):指保存消息的一个容器,本质上是个队列,需要支持高吞吐、高并发和高可用。

应用场景:

  • 系统奔溃:解耦
  • 服务处理能力有限:削峰
  • 链路耗时长尾:异步
  • 日志如何处理:将日志放入消息队列中

2. 消息队列 Kafka

Kafka:分布式的、分区的、多副本的日志提交服务,在 高吞吐场景下 发挥较为出色。

2.1 使用场景

  • 日志信息
  • Metrics 数据
  • 用户行为

2.2 如何使用

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

2.3 基本概念

  1. Topic:逻辑队列,不同 Topic 可以建立不同的 Topic
  2. Cluster:物理集群,每个集群中可以建立多个不同的 Topic
  3. Producer:生产者,负责将业务消息发送到 Topic 中
  4. Consumer:消费者,负责消费 Topic 中的消息
  5. ConsumerGroup:消费者组,不同组 Consumer 消费进度互不干涉
  6. Partition:通常 Topic 会有多个分片,不同分片之间的消息可以并发来处理,提升了单个 Topic 的吞吐

2.3.1 Offset

消息在 partition 内的相对位置信息,可以理解为唯一 ID,在 partition 内严格递增。

2.3.2 Replica

每个 partition 有多个 Replica,用于容灾备份,Leader Replica 将会从 ISR 中选出。

3. 消息队列 MBQ

  • Pulsar:下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用存算分离的结构设计;
  • BMQ:与 Pulsar 架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的 Kafka 集群。

4. 消息队列 RocketMQ

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