从"为什么用 MQ、消息丢了/重复了/积压了"出发,顺藤摸瓜找到根因
| MQ | 擅长 | 吞吐 | 延迟 | 选型场景 |
|---|---|---|---|---|
| RabbitMQ | 可靠、路由灵活、延迟低 | 万级 | 微秒 | 业务消息、订单、通知 |
| Kafka | 高吞吐、日志流、持久化 | 百万级 | 毫秒 | 日志、大数据、流计算 |
| RocketMQ | 顺序、事务消息、可靠 | 十万级 | 毫秒 | 金融、电商(阿里) |
| 问题 | 本质 | 方案 |
|---|---|---|
| 为什么用 MQ | 异步/解耦/削峰 | 但引入可靠性/幂等/顺序复杂度 |
| 消息丢了 | 三个环节都可能丢 | 生产确认+MQ持久化+手动ACK |
| 重复消费 | At Least Once 重试 | 消费端幂等(去重表/Redis/唯一约束) |
| 顺序乱了 | 多消费者并行 | 同 key 同 partition,单线程消费 |
| 选哪个 MQ | 各有擅长 | RabbitMQ(业务)/Kafka(日志)/RocketMQ(事务) |