用于保持我的消费者活着(非常长的可变长度处理)我正在后台线程中实现一个空的poll()调用,如果我在polls()之间花费太多时间,将阻止代理重新平衡。我已经将我的轮询间隔设置得很长,但我不想仅仅为了更长和更长的处理而不断增加它。
投票没有记录的正确方法是什么?目前我正在调用poll(),然后重新寻找回调调用call()中返回的每个分区的最早偏移量,这样一旦处理完之前的消息,主线程就可以正确读取它们。
ConsumerRecords<String, String> msgs = kafkaConsumer.poll(timeout);
Map<Integer, Long> partitionToOffsets = getEarliestPartitionOffsets(msgs); // helper method
seekToOffsets(partitionToOffsets);
答案 0 :(得分:3)
处理长处理时间(以及避免消费者重新平衡)的正确方法是使用KafkaConsumer.pause()
/ KafkaConsumer.resume()
方法。你可以在这里阅读更多相关信息: