1. 基本概念
- Topic: 消息类别的集合,如订单消息发送到
order_topic
。 - 标签(Tag): 同一Topic下区分不同消息的标志,实现精细化消息管理。
- ConsumeGroup: 消息消费组,可订阅多个Topic,一个Topic可被多个消费组订阅。
- 队列(Queue): Topic下的消息存储单元,可分布在多个Broker上。
2. 消息队列选择算法
- 轮询算法: 默认算法,均匀分布消息到队列。
- 最小投递延迟算法: 优先选择投递延迟小的队列,可能导致分布不均。
3. 消费模式
- 集群模式: 消息在消费组内只被单个消费者消费,实现负载均衡。
- 广播消费: 消息推送给所有消费者,适用于如缓存刷新的场景。
4. Confirm与重试机制
- Confirm机制: 发送成功后MQ返回ack,失败返回nack。
- 重试机制: 消息消费失败时,Broker提供延迟重试,最多16次,失败后转死信队列。
5. 死信队列
- 处理无法正常消费的消息,超过重试次数后存储。
6. Queue分配算法
- 平均分配策略: 默认,按队列数和消费者数平均分配。
- 环形分配策略: 顺序分配队列形成环形。
- 一致性Hash策略: 通过Hash值减少Rebalance。
- 同机房策略: 优先分配同机房的队列。
7. Rebalance机制
- 重新分配Queue以提升并行消费能力,触发场景包括队列数量变化或消费者数量变化。
8. 消息过滤
- 根据Tag或自定义属性在Broker端过滤,减少无用消息传输。
9. 基本组件
- Nameserver: 管理Topic路由。
- Broker: 消息存储服务器,分为Master和Slave角色。
- Client: 包括Producer和Consumer。
10. 消息复制
- 同步复制: 消息同步到Slave后再返回,有延迟但数据安全。
- 异步复制: 消息存储后立即返回,高吞吐量但可能数据丢失。
11. 消息类型
- 延迟消息: 支持18个等级的延迟。
- 事务消息: 保障分布式场景下消息与本地事务一致性。
12. 基本原理
- 零拷贝: 使用mmap实现,减少CPU拷贝操作。
- 消息存储: 包括CommitLog、ConsumeQueue、Index。
13. 消费方式
- 拉取式消费(Pull Consumer): 主动从Broker拉取消息。
- 推动式消费(Push Consumer): Broker主动推送消息给消费者。
14. 应用场景
- 消息重试: 消费者消费失败后的重试机制。
- 消息重投: 生产者发送失败后的重投策略。
- 顺序消费: 包括分区顺序消息和全局顺序消息。
15. 顺序消息
- 分区顺序消息: 同一分区内FIFO,不同分区无要求。
- 全局顺序消息: 所有消息FIFO。