是否可以使用Kafka源进行一次性处理,在Beam中使用KafkaIO
?有一个可以设置为AUTO_COMMIT
的标志,但似乎它在消费者处理数据之后直接返回Kafka,而不是在管道完成处理消息之后。
答案 0 :(得分:3)
是。像Dataflow和Flink这样的光束运行器将处理后的偏移存储在内部状态,因此它与Kafka Consumer配置中的“AUTO_COMMIT”无关。存储的内部状态通过处理原子检查(实际细节取决于运行者)。
还有一些选项可以实现端到端的一次性语义(从源到Beam应用程序到接收器)。 KafkaIO源提供了一个只读提交记录的选项,并且还支持精确一次的接收。
某些管道确实设置了'AUTO_COMMIT',主要是为了当从头开始重新启动管道时(而不是保留内部状态的updated),它会在旧管道左边大致恢复。正如您所提到的,这没有处理保证。