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