在什么情况下会出现消息重复消费?
一般来说,重复消费会在两种情况下出现。
1.消息在发往a机器后,再次发往b机器,导致消费两次。
2.消息往a机器发两次。
怎么处理?
对于第一种情况,只需要根据数据的特点做对应的分区即可,保证该类型的消息只会往a机器发送
KafkaListSender<Journal> sender = new KafkaListSender<>(KafkaTopicConfig.getTopic(companyId, KafkaTopicConfig.TopicKey.Journal), KafkaTopicConfig.TopicKey.Journal.getKey(), (journal) -> {
String key = String.valueOf(defaultCrossId == journal.getDebit_account_id() ? journal.getCredit_account_id(): journal.getDebit_account_id());
return key;
});
对于第二种情况时有uuid即可解决
这个uuid应该存放在哪里?
有必要存在入redis吗,没有必要。
一般来说,journal会出现重复消费只会在消息发送的第一次消费过程中,超过一定时间之后,很难再出现这个问题。因此只需要保证在一批消息过来时不会出现重复消费即可。
该uuid在方法内作为局部变量即可。