记一次线上kafka重复消费的问题解决及思考

目录

  • 问题
  • 排查原因
    • 生产者原因
    • 消费者可能原因
      • 1. 重复消息被分到同一消费者的同一批次处理
      • 2. 重复消息被分到同一消费者的不同批次处理
      • 3. 重复消息被几乎同时分到不同消费者处理
  • 解决方案
    • 1.对批量消息进行去重
    • 2. 对分配到不同消费者的消息进行redis去重
    • 3. 生产者在发送消息前先进行路由分区
  • 消费超时发送重平衡导致重复消费
    • kafka消费原理简介
      • enable.auto.commit
      • auto.commit.interval.ms
      • session.timeout.ms
      • max.poll.interval.ms
      • max.poll.records
      • 重复消费原因
      • 解决办法
  • 其他
    • poll(5000)中5000的含义
    • 如果poll处理时发生异常怎么办?

问题

线上ELK日志发现kafka消费者消费到重复消息

排查原因

生产者原因

由于生产方本身就发送了重复的消息,导致消费到重复消息

消费者可能原因

消费方采用的是循环poll的模式,具体是在多线程分租户去批量处理的消息

                while(true) {
   
                    ConsumerRecords consumerRecords;
                    do {
   
                        consumerRecords = this.consumer.poll(60000L);
                    } while(consumerRecords == null);

                    if (!consumerRecords.isEmpty()) {
   
                        long beginTime = System.currentTimeMillis();
                        Map recordMap = this.consumerHandler.slice(consumerRecords);
                        List

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/a91b87709e.html