目录
问题
线上ELK日志发现kafka消费者消费到重复消息
排查原因
生产者原因
由于生产方本身就发送了重复的消息,导致消费到重复消息
消费者可能原因
消费方采用的是循环poll的模式,具体是在多线程分租户去批量处理的消息
while(true) {
ConsumerRecords consumerRecords;
do {
consumerRecords = this.consumer.poll(60000L);
} while(consumerRecords == null);
if (!consumerRecords.isEmpty()) {
long beginTime = System.currentTimeMillis();
Map<String, List> recordMap = this.consumerHandler.slice(consumerRecords);
List<ConsumerFutureDto> sliceFutureList = this.submitToExecutorService(recordMap);
this.checkReinstanceConsumerExecutorService(unDoneSliceFutures);
sliceFutureList.forEach((item) -> {
unDoneSliceFutures.add(item.getFuture(

本文记录了一次线上Kafka重复消费问题的解决过程,分析了生产者和消费者可能导致重复消费的原因,包括消息被分到同一消费者的同一批次处理、不同批次处理以及不同消费者处理。提出了解决方案,如批量消息去重、使用Redis进行去重以及生产者消息路由分区。还探讨了消费超时和重平衡导致的重复消费及其解决办法。


被折叠的 条评论
为什么被折叠?



