Apache beam 如何在apache beam中分配和检查消息的事件时间
我的源代码是一个Apache beam 如何在apache beam中分配和检查消息的事件时间,apache-beam,Apache Beam,我的源代码是一个KafkaIO.read(),现在我想使用ParDo来解码来自kafka的消息,并使用消息的一个字段作为此消息的事件时间。我怎么做?我没有找到任何关于如何执行的示例。首先,您需要通过扩展TimestampPolicy 例如: public class CustomFieldTimePolicy extends TimestampPolicy<String, Foo> { protected Instant currentWatermark; public Cus
KafkaIO.read()
,现在我想使用ParDo来解码来自kafka的消息,并使用消息的一个字段作为此消息的事件时间。我怎么做?我没有找到任何关于如何执行的示例。首先,您需要通过扩展TimestampPolicy
例如:
public class CustomFieldTimePolicy extends TimestampPolicy<String, Foo> {
protected Instant currentWatermark;
public CustomFieldTimePolicy(Optional<Instant> previousWatermark) {
currentWatermark = previousWatermark.orElse(BoundedWindow.TIMESTAMP_MIN_VALUE);
}
@Override
public Instant getTimestampForRecord(PartitionContext ctx, KafkaRecord<String, Foo> record) {
currentWatermark = new Instant(record.getKV().getValue().getTimestamp());
return currentWatermark;
}
@Override
public Instant getWatermark(PartitionContext ctx) {
return currentWatermark;
}
此行负责创建一个新的timestampolicy,传递一个相关的分区和以前的检查点水印
你知道怎么做了吗?请分享你的发现,因为我目前面临同样的问题。
KafkaIO.<String, Foo>read().withBootstrapServers("http://localhost:9092")
.withTopic("foo")
.withKeyDeserializer(StringDeserializer.class)
.withValueDeserializerAndCoder(KafkaAvroDeserializer.class, AvroCoder.of(Foo.class)) //if you use avro
.withTimestampPolicyFactory((tp, previousWatermark) -> new CustomFieldTimePolicy(previousWatermark))
.updateConsumerProperties(kafkaProperties))
withTimestampPolicyFactory(tp, previousWatermark) -> new CustomFieldTimePolicy(previousWatermark))