Kafka在单个partition和单个consumerGroup下重复消费的问题

正常情况下

对应一个topic时,一个group中只有一个消费者能消费到某个Partition的数据,该partition只能被一个consumer消费。

在这里插入图片描述

但是在我一波操作下,被重复消费了。因为和消费者有关,所以只展示消费者。

两个消费者代码相同

    @KafkaListener(groupId = "xgroup-1",topicPartitions = {@TopicPartition(topic = "test-topic-1", partitions = {"0"})})
    public void processMessage(String content, ConsumerRecord<? , ?> record, Acknowledgment acknowledgment) {

        Optional<?> kafkaMessage = Optional.ofNullable(record.value());
        // 对象存在
        if (kafkaMessage.isPresent()) {
            System.out.println("线程  "+Thread.currentThread().getName()+"  1:test-topic-1 监听得到: "+content+" record.offset() = " + record.offset());
            acknowledgment.acknowledge();
        }
    }

运行结果:可以发现重复消费了,同一个消费者组内的竟然对一个partition重复消费了

线程  org.springframework.kafka.KafkaListenerEndpointContainer#1-0-C-1  2 :test-topic-1 监听得到: {"id":1654938099313,"msg":null} record.offset() = 70
线程  org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1  1:test-topic-1 监听得到: {"id":1654938099313,"msg":null} record.offset() = 70

####问题出现原因

因为我使用了下面的注解方式指定了partition所以导致了这个现象的发生,这破坏了kafka自带的rebalance机制,从而也导致出现了重复消费的问题。

@KafkaListener(groupId = "xgroup-1",topicPartitions = {@TopicPartition(topic = "test-topic-1", partitions = {"0"})})

####解决方法

不指定partition即可

//@KafkaListener(groupId = "xgroup-1",topics = "test-topic-1")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值