一、功能
- 削峰
与限流不同,限流是超出部分不处理,削峰是等会再处理,应对潮汐
链路太长,影响接口性能,对一致性要求不高的操作可以使用job异步完成
- 解藕服务
- 分布式系统的异步
- 采集日志
- 消息传递
二、实现
Kafka | RocketMQ | RabbitMQ | ActiveMQ | |
---|---|---|---|---|
单机吞吐量 | 10万级 | 10万级 | 万级 | 万级 |
开发语言 | Scala | Java | Erlang | Java |
高可用 | 分布式架构 | 分布式架构 | 主从架构 | 主从架构 |
性能 | ms级 | ms级 | us级 | us级 |
功能 | 只支持主要MQ功能 | 顺序消息、事物消息等功能完善 | 并发性强、性能好、延时低 | 成熟的社区产品、文档丰富 |
三、可靠性
1. 生产者丢失
生产者没有发送成功 or MQ没收到消息
- 同步发送 不会丢失
- 异步发送 使用回调通知 + 本地消息列表 数据库保存mq消息(同步),异步将mq发送,发送成功就更新数据库状态,失败就重试,多次失败报警
2. MQ丢失
在内存中的mq因为宕机丢失
- Kafka
- RocketMQ 通过同步刷盘或异步刷盘(默认)的方式,将mq写入磁盘
3. 消费者丢失
消费者拿到mq未执行时,消费者宕机
- Kafka
- RocketMQ 默认需要消费者ack回复,若未回复,消息会进入重试队列、死信队列