Kafka Streams:在重新平衡期间存储状态

时间:2018-06-10 04:23:16

标签: apache-kafka apache-kafka-streams

在定期执行punctuate方法中遍历迭代器的过程中,如果发生重新平衡,下面的循环会停止还是抛出异常?或者它会自动恢复,如果是这样会恢复相同的分区分片?

    KeyValue<String, House> curr;
    KeyValueIterator<String, House> houseIterator = houseStore.all();
    while (houseIterator.hasNext()) {
        j++;
        curr = houseIterator.next();
        houseStore.delete(curr.key);
    }
    houseIterator.close();

1 个答案:

答案 0 :(得分:0)

执行线程在KafkaConsumer#poll()完成之前不会调用punctuate()。因此,线程(即punctuate)将继续运行。

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

但请注意,建议配置max.poll.interval.ms,以使实例不会首先退出使用者组。即,该值应设置为比punctuate的预期运行时更大的值。