消息被重新消费场景
用kafka举例:
生产者向kafka打入3条数据,分别是(数据1,offset=100),(数据2,offset=110),(数据3,offset=120)
消费者每消费一条数据即将刚消费的消息offset提交给kafka。
考虑一种场景:消费者消费到数据2的消息,再准备提交offset=110时,消费者出了故障,本来要提交的offset未能提交。等消费者修复故障重启后再次链接kafka,会再次消费到数据2。
解决思路:
(1)消费的数据写入数据库,此时可以先在数据库里查询有没有同样的数据。
(2)消费的数据写入数据库,获取消息的唯一字段作为数据库的唯一键约束,即使消费到重复数据,插入只会报错,但不会出现脏数据。
(3)消费的数据写入Redis,Redis本身可以保证幂等性