- 异步,解耦,削峰。
2.常见问题
- 消息丢失:生产者丢失/队列丢失/消费者丢失
- 消息重复:生产者重复,消费者重复
- 架构问题,单点故障
- 消息积压问题
- 如何保证消息的顺序性问题?
- 一致性问题,多个消费者,一个消息失败,其他消息成功该怎么办?
- 我们是如何使用NSQ处理7500亿消息的
- NSQ架构
- nsqd:topic&channel
- nsqlookupd
- nsqadmin
- 客户端表示它们可以接收消息
- NSQ发送消息,暂时将消息存在本地
- 客户端回复FIN 或者 REQ 表示成功或者重发。如果客户端未能及时发送,则NSQ将重复发送消息给该客户端。
- 节点之间没有消息复制,所以即使多个节点部署,万一节点出现问题,还是有一段时间会出现消息无法接收到的情况,所以向多个节点同时发送消息也是一种解决方式
- 消息ID,发送成功返回消息ID,否则重复发送
- 去重或幂等性
- NSQ节点之间没有复制消息。如果节点挂了,数据就丢失。解决方案:生产者多写入几个节点
- 扩大消费能力。
- 过期丢失只有重新查询出来导入MQ
- 消息消费之后要有反馈
- 可以重复消费,设置消费次数。
- 数据库事务+本地消息表
- 消息队列反馈+事务机制
- 生产消息,队列要有反馈
- 队列消息要有状态
- NSQ无法保证
- 没有顺序
- 节点之间没有复制
-
productor
- 可以选择消息入哪个topic,哪个分区
-
topic
-
partition 分区,水平扩展
- 每个分区有一个leader,0-多个follower
-
consumer
- 就是一个partition,只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费。
-
broker 代理
-
offset 消费者控制,可重复读取