我有一个Kafka Consumer,它在给定的获取间隔内获取代理。它以给定的时间间隔进行获取,当消息在主题中时就很好。但是我真的不知道为什么当kafka主题中没有消息时,消费者发送更多提取请求的原因。
答案 0 :(得分:0)
通常,消费者向经纪人发送两种类型的请求:
心跳通过单独的线程发送,其间隔配置为heartbeat.interval.ms
(默认为3秒)
对于轮询请求,没有特定的时间间隔,这取决于您的代码。 (只有一个上限(max.poll.interval.ms
))
当没有将您的使用者分配到的分区中的数据时,发送更频繁的轮询请求是绝对合理的。假设您有这样的代码:
void consumeLoop() {
while (true) {
records = consumer.poll();
if(!records.isEmpty()) {
processMessages(records);
}
}
}
如您所见,如果轮询没有返回记录,那么您的使用者将立即发送另一个轮询请求。但是,如果有数据,则应先处理这些记录,然后再发送下一个轮询请求。