在定期执行punctuate方法中遍历迭代器的过程中,如果发生重新平衡,下面的循环会停止还是抛出异常?或者它会自动恢复,如果是这样会恢复相同的分区分片?
KeyValue<String, House> curr;
KeyValueIterator<String, House> houseIterator = houseStore.all();
while (houseIterator.hasNext()) {
j++;
curr = houseIterator.next();
houseStore.delete(curr.key);
}
houseIterator.close();
答案 0 :(得分:0)
执行线程在KafkaConsumer#poll()
完成之前不会调用punctuate()
。因此,线程(即punctuate
)将继续运行。
如果punctuate()
在max.poll.interval.ms
通过之前完成,它将正确重新平衡。如果punctuate
在max.poll.interval.ms
之后完成,则消费者将退出使用者组,并且分区可能会被重新分配。但是,根据punctuate
中的代码,它不会被注意到,punctuate
可能仍会完成。稍后,当调用poll
时,实例将通过另一个重新平衡重新加入该组。
但请注意,建议配置max.poll.interval.ms
,以使实例不会首先退出使用者组。即,该值应设置为比punctuate
的预期运行时更大的值。