如何处理消费过程中的重复消费
用幂等性解决重复消息问题
一个幂等操作的特点是,其任意多次执行所产生的影响均与一次执行的影响相同。
几种常用的设计幂等操作的方法:
- 利用数据库的唯一约束实现幂等
- 为更新的数据设置前置条件
- 记录并检查操作
为什么消息队列不实现Exactly once ?
- 消费端在pull消息是需要检测该消息是否被消费过,拉低消费速度影响性能
- 消即使实现了,consumer再回ACK的时候也可能出现失败导致重复消费
如何保证消息的顺序性
- topic层面无法保证,只有在队列层面或partition层面才能保证
- 全局严格顺序,只能将队列数设置为1,生产消费都为1
- 局部严格顺序,指定队列来发送消息,一致性哈希算法可以保证,相同Key 的消息总是发送到同一个队列上,这样可以保证相同 Key 的消息是严格有序的。