Apache Beam 中的 commitOffsetsInFinalize() 和复选标记

commitOffsetsInFinalize() and checkmarks in Apache Beam

我正在开发一个使用 KafkaIO 作为输入的 Beam 应用程序

KafkaIO.<Long, GenericRecord>read()
            .withBootstrapServers("bootstrapServers")
            .withTopic("topicName")
            .withConsumerConfigUpdates(confs)
            .withKeyDeserializer(LongDeserializer.class)
            .withValueDeserializer((Deserializer.class)
            .commitOffsetsInFinalize()
            .withoutMetadata();

我想了解 commitOffsetsInFinalize() 的工作原理。

如何才能完成流媒体作业? 管道中的最后一步是将消息写入 DynamoDb 的自定义 DoFn。有什么方法可以在那里手动调用一些 finalize() 方法,以便在每次成功执行 DoFn?

后提交偏移量

我也很难理解检查点和最终确定之间的关系是什么?如果没有在管道上启用检查点,我是否仍然能够完成并让 commitOffsetsInFinalize() 工作?

p.s 管道现在的方式,即使 commitOffsetsInFinalize() 每条消息被读取,无论下游是否有故障正在提交,因此导致数据丢失。

谢谢!

这里的 finalize 是指检查点的完成,换句话说,当数据已经持久地提交到 Beam 的运行时状态时(这样 worker failures/reassignment 将被重试,而不必从又是卡夫卡)。这并不意味着有问题的数据已经完成了管道的其余部分。