完成CheckpointMark的梁模型合同

问题描述 投票:0回答:2

我正在研究使用KafkaIO从Kafka读取消息的管道,我正在查看commitOffsetsInFinalize()选项和KafkaCheckpointMark类。

我想实现至少一次的消息传递语义,并希望确保在将Kafka写入某个接收器后将其提交给Kafka。

看看CheckpointMark的界面,目前尚不清楚何时应该进行最终确定。

它是依赖于运行的,在DataflowRunner上执行时会发生什么?

commitOffsetsInFinalize上阅读KafkaIO.Read javadoc也没有给我的理解带来清晰,特别是短语

但它不提供硬处理保证

问题:当模型标记最终确定时,梁模型中的合同是什么,是否有?

java apache-kafka google-cloud-dataflow apache-beam apache-beam-io
2个回答
1
投票

是的,这种行为取决于跑步者。在DF Runner中,一旦数据已提交到Dataflow的内部状态,Finalization就会在流管道中发生。即当整个元素束完成处理时。

基于doc描述,commitOffsetsInFinalize有助于减少重新处理,但现在确实如果使用它,无论哪种方式,您将在DF Runner中至少具有一次语义。


0
投票

使用Dataflow运行程序时,一旦从源读取的结果持久地提交到Dataflow的内部状态,就会发生检查点终结。只要您更新或耗尽管道,这就可以保证一次性处理,但是如果取消正在运行的管道则不能。当commitOffsetsInFinalize设置为true时,这将导致Dataflow以这种方式提交分区偏移。

当commitOffsetsInFinalize为false时,KafkaIO使用另一种更有效的Kafka读取方式。在此模式下,Dataflow(或其他运行程序)将存储它为每个分区读取的偏移量。在这种模式下,没有数据丢失问题,因为没有从Kafka中消耗数据,新的管道可以准确指定Kafka流中的哪个位置开始读取

© www.soinside.com 2019 - 2024. All rights reserved.