Kafka消费者调查具有100毫秒的超时时间,似乎等待分区分配的时间太长

时间:2019-02-21 11:22:05

标签: kafka-consumer-api

我希望有一个固定价格的Kafka消费者,这样我们每三分钟可以轮询一次主题并处理收到的记录(假设这些记录将在3分钟内处理)。

我写了下面的代码

consumer.subscribe("myTopic", this); //this class implements ConsumerRebalanceListener
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> {
  LOGGER.debug("FIRE");
  try {
      ConsumerRecords<String, String> consumerRecords = consumer
          .poll(Duration.ofMillis(100)); //return quickly.
      //myMessageHandler.handle(consumerRecords);
      consumer.commitSync();//have set enable.auto.commit to false
  } catch(Exception exception) {
    consumer.close();
  }
}, 5, 180, TimeUnit.SECONDS);//initial delay 5 sec, and then every 3 minutes

似乎消费者在等待了几分钟(大约9-10分钟)后,正在获取onPartitionsRevoked()或onPartitionsAssigned()的回调。因此poll()在这段时间内不会返回任何记录。

但是,如果我将Consumer.poll()的超时时间从100ms增加到1000ms。重新平衡(分区分配)发生在第一次调用poll()期间,并开始返回记录。

分区分配是否与poll()超时有关?如果poll()超时时间较长,则分区分配会在对poll()的第一次调用时发生,而对于poll(timeout <= 100ms),则需要花费几分钟(或多次调用poll())才能完成分区分配。

0 个答案:

没有答案