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 将被重试,而不必从又是卡夫卡)。这并不意味着有问题的数据已经完成了管道的其余部分。
我正在开发一个使用 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 将被重试,而不必从又是卡夫卡)。这并不意味着有问题的数据已经完成了管道的其余部分。