上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

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

guduadmin11天前

目录

  • 问题
  • 排查原因
    • 生产者原因
    • 消费者可能原因
      • 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

网友评论

搜索
最新文章
热门文章
热门标签