2. 消息队列基础回顾

在进入接口契约设计之前,有必要先统一消息队列的核心概念认知,并了解主流 MQ 产品的选型差异。本章将围绕“生产者-消费者-主题-分区”这一基础模型展开,并通过对比表格与架构图帮助建立直观理解。

2.1 核心概念

消息队列(Message Queue,MQ)本质上是一种异步通信中间件,用于解耦生产者和消费者之间的直接依赖。以下四个概念是所有 MQ 产品的基石:

概念 定义 类比
生产者(Producer) 负责发送消息的应用程序或服务实例。 寄信人
消费者(Consumer) 负责接收并处理消息的应用程序或服务实例。 收信人
主题(Topic) 消息的逻辑分类或频道。生产者将消息发往主题,消费者从主题订阅消息。 信箱上的标签
分区(Partition) 主题内部的物理分片,用于水平扩展和并行消费。每个分区内的消息是有序的。 信箱的多个隔层
关键理解: 分区是 MQ 实现高吞吐的核心手段。生产者将消息按分区策略写入不同分区,消费者组内的不同实例可以分别消费不同分区,从而实现并行处理。

2.2 消息队列基础架构

下图展示了生产者、主题、分区与消费者之间的基本交互关系:

消息队列基础架构图 生产者 主题 Topic 分区 0 分区 1 分区 2 消费者 消费者 消费者 说明:生产者将消息写入主题,主题按分区策略将消息分布到不同分区;消费者组内的实例各自消费一个或多个分区,实现并行处理。

2.3 常见 MQ 选型对比

目前业界主流的消息队列产品包括 Kafka、RabbitMQ 和 RocketMQ。三者在设计哲学、适用场景和性能特征上存在显著差异:

对比维度 Kafka RabbitMQ RocketMQ
开发语言 Scala / Java Erlang Java
消息模型 发布-订阅(Topic + Partition) 交换机-队列(Exchange + Queue) 发布-订阅(Topic + Queue)
吞吐量 极高(百万级/秒) 较高(万级/秒) 高(十万级/秒)
消息可靠性 高(ACK + 副本机制) 高(ACK + 持久化) 高(同步刷盘 + 副本)
消息顺序性 分区内严格有序 单队列有序 分区内严格有序
延迟 毫秒级(批量写入) 微秒级 毫秒级
典型场景 日志收集、大数据管道、流处理 微服务异步通信、任务队列 交易消息、金融场景、IoT
选型建议:
  • 如果追求极致吞吐且消息顺序性要求高(如日志、埋点),优先选择 Kafka。
  • 如果注重灵活路由和低延迟(如微服务解耦、RPC 异步化),优先选择 RabbitMQ。
  • 如果需要强一致性和事务消息(如订单、支付),优先选择 RocketMQ。

2.4 消息队列核心流程对比

下图从消息写入和消息消费两个维度,对比三种 MQ 的核心流程差异:

三种 MQ 核心流程对比图 三种 MQ 核心流程对比 Kafka Producer → Topic → Partition Consumer Group → Partition 特点:批量写入、顺序追加、 消费者组内负载均衡 RabbitMQ Producer → Exchange → Queue Consumer → Queue 特点:灵活路由、多种交换机 类型(direct/topic/fanout) RocketMQ Producer → Topic → Queue Consumer Group → Queue 特点:支持事务消息、 定时消息、顺序消息 核心差异总结: • Kafka:面向日志与流处理,吞吐最高,分区内有序,适合大数据场景。 • RabbitMQ:面向微服务与任务队列,路由灵活,延迟最低,适合业务解耦。 • RocketMQ:面向交易与金融场景,支持事务消息,兼顾吞吐与可靠性。

2.5 本章小结

  • 生产者、消费者、主题、分区是消息队列的四大核心概念,理解它们之间的关系是后续设计接口契约的基础。
  • Kafka 适合高吞吐、日志类场景;RabbitMQ 适合灵活路由、低延迟场景;RocketMQ 适合事务消息、强一致性场景。
  • 选型时需综合考虑吞吐量、延迟、消息顺序性、可靠性以及运维成本等因素。