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 通过之前完成,它将正确地重新平衡。如果 punctuatemax.poll.interval.ms 之后完成,消费者将退出消费者组,并且它的分区可能会被重新分配。但是,根据您在 punctuate 中的代码,它不会被注意到并且 punctuate 可能仍会完成。稍后,当 poll 被调用时,该实例将通过另一个重新平衡重新加入该组。

不过请注意,建议配置 max.poll.interval.ms 以便实例不会首先从消费者组中退出。即,该值应设置为比 punctuate.

的预期 运行 时间更大的值