Kafka 消费的语义是 “at least once”, 也就是至少投递一次,保证消息不丢,但是不会保证消息不重复。在出现网络问题、客户端重启时均有可能出现少量重复消息,此时应用消费端如果对消息重复比较敏感(比如说订单交易类),则应该做到消息幂等。
以数据库类应用为例,常用做法是:
- 发送消息时,传入 key 作为唯一流水号ID;
- 消费消息时,判断 key 是否已经消费过,如果已经消费过了,则忽略,如果没消费过,则消费一次;
当然,如果应用本身对少量消息重复不敏感,则不需要做此类幂等检查。
本页目录
Kafka 消费的语义是 “at least once”, 也就是至少投递一次,保证消息不丢,但是不会保证消息不重复。在出现网络问题、客户端重启时均有可能出现少量重复消息,此时应用消费端如果对消息重复比较敏感(比如说订单交易类),则应该做到消息幂等。
以数据库类应用为例,常用做法是:
当然,如果应用本身对少量消息重复不敏感,则不需要做此类幂等检查。