Apache flink ApacheBeam中的CommitteOffsetSinFinalize()和复选标记

Apache flink ApacheBeam中的CommitteOffsetSinFinalize()和复选标记,apache-flink,apache-beam,apache-beam-kafkaio,Apache Flink,Apache Beam,Apache Beam Kafkaio,我正在开发一个使用KafkaIO作为输入的Beam应用程序 KafkaIO.<Long, GenericRecord>read() .withBootstrapServers("bootstrapServers") .withTopic("topicName") .withConsumerConfigUpdates(confs) .withKeyDe

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

KafkaIO.<Long, GenericRecord>read()
            .withBootstrapServers("bootstrapServers")
            .withTopic("topicName")
            .withConsumerConfigUpdates(confs)
            .withKeyDeserializer(LongDeserializer.class)
            .withValueDeserializer((Deserializer.class)
            .commitOffsetsInFinalize()
            .withoutMetadata();
KafkaIO.read()
.使用BootstrapServer(“BootstrapServer”)
.withTopic(“主题名称”)
.使用消费者配置更新(confs)
.withKeyDeserializer(LongDeserializer.class)
.withValueDeserializer((Deserializer.class)
.CommitteofSetsinFinalize()
.没有元数据();
我正在试图了解
committeofsetsinfinalize()
的工作原理

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

此外,我很难理解检查点与最终确定之间的关系?如果管道上没有启用检查点,我是否仍能够最终确定并使
committeofsetsinfinalize()
正常工作

p、 这就是管道目前的运行方式,即使使用
committeofsetsinfinalize()
读取的每条消息,也不管下游是否有故障正在提交,从而导致数据丢失


谢谢!

这里的finalize指的是检查点的finalize,换句话说,当数据已持续提交到Beam的运行时状态时(这样将重试工作故障/重新分配,而无需再次从Kafka读取此消息)。这并不意味着所讨论的数据已经通过管道完成了剩余的工作。

谢谢robertwb。如果从未定义检查点,会发生什么?如果应用程序在Flink上运行,默认的检查点机制是什么?我的理解是,除非我有
启用自动提交配置,否则为false
无论是否设置了
commitofsetsinfinalize()
,消息仍将提交,是否正确?正确,这仅在未设置kafka使用者配置的情况下才有用。