消息队列¶
1. 消息队列前世今生¶
消息队列(MQ):指保存消息的一个容器,本质上是个队列,需要支持高吞吐、高并发和高可用。
应用场景:
- 系统奔溃:解耦
- 服务处理能力有限:削峰
- 链路耗时长尾:异步
- 日志如何处理:将日志放入消息队列中
2. 消息队列 Kafka¶
Kafka:分布式的、分区的、多副本的日志提交服务,在 高吞吐场景下 发挥较为出色。
2.1 使用场景¶
- 日志信息
- Metrics 数据
- 用户行为
2.2 如何使用¶
创建集群 -> 新增 Topic -> 编写生产者逻辑 -> 编写消费者逻辑
2.3 基本概念¶
- Topic:逻辑队列,不同 Topic 可以建立不同的 Topic
- Cluster:物理集群,每个集群中可以建立多个不同的 Topic
- Producer:生产者,负责将业务消息发送到 Topic 中
- Consumer:消费者,负责消费 Topic 中的消息
- ConsumerGroup:消费者组,不同组 Consumer 消费进度互不干涉
- 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:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些 实时场景中 运用较广。



