分布式消息服务Kafka

消息重复和消费幂等

2024-05-08 08:57:31

Kafka 消费的语义是 “at least once”, 也就是至少投递一次,保证消息不丢,但是不会保证消息不重复。在出现网络问题、客户端重启时均有可能出现少量重复消息,此时应用消费端如果对消息重复比较敏感(比如说订单交易类),则应该做到消息幂等。

以数据库类应用为例,常用做法是:

(1)发送消息时,传入 key 作为唯一流水号ID;

(2)消费消息时,判断 key 是否已经消费过,如果已经消费过了,则忽略,如果没消费过,则消费一次;

当然,如果应用本身对少量消息重复不敏感,则不需要做此类幂等检查。


jfk6Dg6vNWYg