如何使用Kafka Stream手动提交?

时间:2017-04-14 17:19:35

标签: apache-kafka apache-kafka-streams

有没有办法手动提交Kafka Stream?

通常使用KafkaConsumer,我会执行以下操作:

while (true) {
    ConsumerRecords<String, String> records = consumer.poll(100);
    for (ConsumerRecord<String, String> record : records){
       // process records
    }
   consumer.commitAsync();
}

我手动调用提交的地方。我没有看到KStream的类似API。

1 个答案:

答案 0 :(得分:23)

提交由Streams内部和全自动处理,因此通常没有理由手动提交。请注意,Streams处理此方式与使用者自动提交不同 - 实际上,对内部使用的使用者禁用自动提交,Streams管理提交&#34;手动&#34;。原因是,提交只能在处理过程中的某些点发生,以确保没有数据丢失(在更新状态和刷新结果方面存在许多内部依赖关系)。

对于更频繁的提交,您可以通过StreamsConfig参数commit.interval.ms减少提交间隔。

尽管如此,通过低级处理器API可以间接进行手动提交。您可以使用context方法提供的init()对象来呼叫context#commit()。请注意,这只是对Streams&#34;的请求。尽快提交 - 它不直接发布提交。