卡夫卡正确的方式来调查没有记录

时间:2017-07-05 13:26:38

标签: apache-kafka kafka-consumer-api

用于保持我的消费者活着(非常长的可变长度处理)我正在后台线程中实现一个空的poll()调用,如果我在polls()之间花费太多时间,将阻止代理重新平衡。我已经将我的轮询间隔设置得很长,但我不想仅仅为了更长和更长的处理而不断增加它。

投票没有记录的正确方法是什么?目前我正在调用poll(),然后重新寻找回调调用call()中返回的每个分区的最早偏移量,这样一旦处理完之前的消息,主线程就可以正确读取它们。

ConsumerRecords<String, String> msgs = kafkaConsumer.poll(timeout);
Map<Integer, Long> partitionToOffsets = getEarliestPartitionOffsets(msgs); // helper method
seekToOffsets(partitionToOffsets);

1 个答案:

答案 0 :(得分:3)

处理长处理时间(以及避免消费者重新平衡)的正确方法是使用KafkaConsumer.pause() / KafkaConsumer.resume()方法。你可以在这里阅读更多相关信息: