有没有办法手动提交Kafka Stream?
通常使用KafkaConsumer
,我会执行以下操作:
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records){
// process records
}
consumer.commitAsync();
}
我手动调用提交的地方。我没有看到KStream
的类似API。
答案 0 :(得分:23)
提交由Streams内部和全自动处理,因此通常没有理由手动提交。请注意,Streams处理此方式与使用者自动提交不同 - 实际上,对内部使用的使用者禁用自动提交,Streams管理提交&#34;手动&#34;。原因是,提交只能在处理过程中的某些点发生,以确保没有数据丢失(在更新状态和刷新结果方面存在许多内部依赖关系)。
对于更频繁的提交,您可以通过StreamsConfig
参数commit.interval.ms
减少提交间隔。
尽管如此,通过低级处理器API可以间接进行手动提交。您可以使用context
方法提供的init()
对象来呼叫context#commit()
。请注意,这只是对Streams&#34;的请求。尽快提交 - 它不直接发布提交。