Kafka的Java客户端-设置消费者长轮询poll消息

默认情况下,消费者⼀次会poll500条消息。

Properties props = new Properties();
//⼀次poll最⼤拉取消息的条数,可以根据消费速度的快慢来设置
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 500);

代码中设置了⻓轮询的时间是1000毫秒:

 //1.创建⼀个消费者的客户端
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
//2. 消费者订阅主题列表
consumer.subscribe(Arrays.asList(TOPIC_NAME));
while (true) {
      //3.poll() API 是拉取消息的⻓轮询
      //设置了⻓轮询的时间是1000毫秒
       ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
       for (ConsumerRecord<String, String> record : records) {
          //4.打印消息
            System.out.printf("收到消息:partition = %d,offset = %d, key = %s, value = %s%n", 
            record.partition(), record.offset(), record.key(), record.value());      
       }    
 } 

意味着:

1 如果⼀次poll到500条,就直接执⾏for循环如果这⼀次没有poll到500条。且时间在1秒内,那么⻓轮询继续poll,要么到500条,要么到1s

2 如果多次poll都没达到500条,且1秒时间到了,那么直接执⾏for循环

3 如果两次poll的间隔超过30s,集群会认为该消费者的消费能⼒过弱,该消费者被踢出消费组,触发rebalance机制,rebalance机制会造成性能开销。

可以通过设置这个参数,让⼀次poll的消息条数少⼀点

Properties props = new Properties();
//⼀次poll最⼤拉取消息的条数,可以根据消费速度的快慢来设置  
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 500);    
//如果两次poll的时间如果超出了30s的时间间隔,kafka会认为其消费能⼒过弱,将其踢出消费组。将分区分配给其他消费者。-rebalance    
props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 30 * 1000);
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值