消息的可靠性
生产消费过程
我们经常使用消息队列,这里我们简单介绍下消息的可靠性,笔者以kafka消息队列为背景。我们看下消息的从产生到消费的整个过程:
如下图:
生产者发送消息到Broker,Broker收到消息后,存储到内存,持久化到集群存储(根据可靠性确认,可以调参:比如如果不需要保证消息不丢失,可以收到消息后,不持久化就返回确认),发送确认给Producer,发送完成。
消费者,采取的是拉取的方式,拉取后,消费完毕(一般都是处理完消费的业务逻辑),发送确认给Broker。
详细,笔者梳理了导图:
消息重复
通过消息的可靠性我们知道,在可靠性的实现中,网络抖动、系统处理繁忙等各种不稳定的情况下
在发送阶段:发送确认超时,发生消息重发。
消费阶段:消费超时,发送消息重发;消费确认超时,也会发生消息重发。
此时,我们需要对重复消息,一般会在消费端,做幂等性处理即对消费消息的业务逻辑做幂等性设计。
一般的业务幂等性设计如下导图: