我正在研究使用kafkaio从kafka读取消息的管道,我正在研究commitofsetsinfinalize()选项和kafkacheckpointmark类。
我希望至少实现一次消息传递语义,并希望确保在将偏移量写入某个接收器之后,将它们提交给kafka。
从checkpointmark的接口来看,还不清楚什么时候应该完成。
它是否依赖于运行程序,在dataflowrunner上执行时需要什么?
阅读kafkaio.read javadoc on commitofsetsinfinalize也不能给我的理解带来清晰,尤其是短语
但它不提供硬处理保证
问:什么样的合同梁模型时,检查点标志应最终确定,有吗?
2条答案
按热度按时间w8rqjzmb1#
是的,这种行为取决于跑步者。在dfrunner中,一旦数据被提交到dataflow的内部状态,就在流式管道中进行终结。i、 e.当整捆元件完成加工时。
基于doc description commitofsetsinfinalize有助于减少再处理,但现在如果使用它,这就很重要了,无论哪种方式,df runner中都至少有一次语义。
htzpubme2#
在使用数据流运行程序时,一旦从源读取的结果被持久地提交到数据流的内部状态,就会发生检查点终结。这保证了只要更新或耗尽管道,就可以进行一次处理,但如果取消正在运行的管道,则不能这样做。当commitofsetsinfinalize设置为true时,这将导致数据流以这种方式提交分区偏移量。
当commitofsetsinfinalize为false时,Kafka会使用一种不同的、更有效的方式来解读Kafka。在这种模式下,数据流(或其他运行程序)将存储它为每个分区读取的偏移量。在这种模式下,不存在数据丢失问题,因为数据不是从kafka中消耗的,新的管道可以指定kafka流中开始读取的确切位置