如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
要保证消息不被重复消费,其实就是要保证消息消费时的幂等性。幂等性:无论你重复请求多少次,得到的结果都是一样的。例如:一条数据重复出现两次,数据库里就只有一条数据,这就保证了系统的幂等性。
那么如何保证幂等性呢?
-
写数据时,先根据主键查一下这条数据是否存在,如果已经存在则 update;
-
数据库的唯一键约束也可以保证不会重复插入多条,因为重复插入多条只会报错,不会导致数据库中出现脏数据;
-
如果是写 redis,就没有问题,因为 set 操作是天然幂等性的。
评论(2)
我也觉的这道题应该回炉一下,有点答非所问
这个问题回答的不太好…应该结合kafka的ack和offset讲一讲