首页 > 解决方案 > 从 Kafka 源读取时在光束管道中使用事件时间

问题描述

我有一个从 Kafka 源读取的光束管道(AppendLogTime 不可用),时间戳嵌入在 Kafka 流中的数据对象中。

我想为我的管道使用事件时间,经过一番谷歌搜索后,我看到一些解决方案在从 KafkaIO 读取数据时使用了 CustomeFieldTimePolicy(提取数据对象的时间戳并将其用于设置水印)。

但后来我看到另一个解决方案,它使用 WithTimestamps.of() 为元素分配时间戳。

我的问题是,这两种方法有什么不同?因为对我来说,他们似乎做着非常相似的工作。

谢谢你。

标签: google-cloud-dataflowapache-beam

解决方案


您想使用CustomFieldTimePolicy. 这将调整用于计算 Kafka 源的水印的时间戳。

WithTimestamps.of()用于更改管道中元素的时间戳,但不影响水印。这是一个非常简单的基于ParDo. 它可以做的转换是有限的,因为它被禁止与水印相矛盾。


推荐阅读