卡夫卡消费者向经纪人发送更多提取请求

时间:2020-02-28 16:39:43

标签: apache-kafka kafka-consumer-api

我有一个Kafka Consumer,它在给定的获取间隔内获取代理。它以给定的时间间隔进行获取,当消息在主题中时就很好。但是我真的不知道为什么当kafka主题中没有消息时,消费者发送更多提取请求的原因。

1 个答案:

答案 0 :(得分:0)

通常,消费者向经纪人发送两种类型的请求:

  • 心跳
  • 投票请求

心跳通过单独的线程发送,其间隔配置为heartbeat.interval.ms(默认为3秒)

对于轮询请求,没有特定的时间间隔,这取决于您的代码。 (只有一个上限(max.poll.interval.ms))

当没有将您的使用者分配到的分区中的数据时,发送更频繁的轮询请求是绝对合理的。假设您有这样的代码:

 void consumeLoop() {
    while (true) {
        records = consumer.poll();
        if(!records.isEmpty()) {
            processMessages(records);
        }
    }
}

如您所见,如果轮询没有返回记录,那么您的使用者将立即发送另一个轮询请求。但是,如果有数据,则应先处理这些记录,然后再发送下一个轮询请求。