消息队列问题¶
重复消费(幂等性)¶
数据丢失¶
rabbitMQ¶
生产者数据丢失¶
confirm机制:每次写的消息都会分配一个唯一的 id,然后如果写入了 RabbitMQ 中,RabbitMQ 会回传一个 ack 消息。如果 RabbitMQ 没能处理这个消息,会回调 nack。
RabbitMQ数据丢失¶
持久化:开启queue 的元数据 与 消息
消费端数据丢失¶
关闭 RabbitMQ 的自动 ack
kafka数据丢失¶
配置:
- 每个 partition 必须有至少 2 个副本
- Leader 至少有一个 follower
- 要求每条数据,必须是写入所有 replica 之后,才能认为是写成功了
- 要求一旦写入失败,就无限重试