kafka2.x重复消费问题

  kafka从0.8升级到kafka2.x后所有客户端代码也需要全部升级。kafka消费程序使用2.x java api重写后发现出现重复消费数据的情况。代码参照官方demo写的如下:

     consumer.subscribe(Collections.singletonList(this.topic));
     while(true){
        ConsumerRecords<Integer, String> records = consumer.poll(Duration.ofSeconds(1));
        for (ConsumerRecord<Integer, String> record : records) {
            System.out.println("Received message: (" + record.key() + ", " + record.value() + ") at offset " + record.offset());
                业务处理
        }
}

出现如下日志:

在2.x api中使用poll 不断的轮询获取数据,就涉及到max.poll.interval.ms参数,其意思是每一轮调用poll之间的空闲时间,如果超过这个空闲时间则认为kafka消费者已死,重新平衡,将分区重新分配给其它成员。这个时间默认300000ms。业务处理逻辑时间过长就会出现这种问题。

解决方法:

     1. 增加 max.poll.interval.ms 时间

     2. 减少max.poll.records,每次获取的最大记录数

     3. 业务处理尽量减少时间

    4. 手动提交offset,处理一条提交一次

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值