Apache Beam FixedWindows 之间的延迟
Posted
技术标签:
【中文标题】Apache Beam FixedWindows 之间的延迟【英文标题】:Delay between Apache Beam FixedWindows 【发布时间】:2020-12-27 02:24:25 【问题描述】:PubSub 每秒都会收到一条消息。数据流在一分钟内使用 ReadFromPubSub 和 FixedWindows 接收此消息。我在窗口之间有大约 6 秒的延迟和丢失的消息(每个窗口都有 57 - 63 个事件)。如果增加 PubSub 中的消息数量,消息的分散度也会增加。如何缩小窗口之间的间隙,在一个窗口中接收所有分钟的消息?
【问题讨论】:
我认为这在watermark and late data documentation 中有解释。当您设置 PCollection 的窗口策略时,您可以通过调用 .withAllowedLateness 操作来允许延迟数据。下面的代码示例演示了一个窗口策略,该策略将允许在窗口结束后最多两天的延迟数据。有关语义的详细信息,请参阅post。 我认为@EnriqueZetina 的评论是正确的答案。如果您希望我们尝试并更新它,请分享您的代码pipeline | 'Read PubSub Messages' >> beam.io.ReadFromPubSub(topic=input_topic)) | 'Window into Fixed Intervals' >> beam.WindowInto(window.FixedWindows(60)) | 'Filter Canary events' >> beam.Filter(is_canary_event) | 'Aggregate Count' >> beam.CombineGlobally(logcount).without_defaults() | 'Write aggregated sums to GCS' >> beam.ParDo(WriteToGCS(output_path)))
【参考方案1】:
Apache Beam 固定窗口使用元素时间戳:
See docs 3.2.6. Element timestamps
对于 pubsub,有两种方法可以给元素一个时间戳:
-
元素放入 PubSubtopic 的时间
用作元素时间戳的消息值。
1 是默认值,使用 2 使用timestamp_attribute。
这意味着在发布消息时,您需要为消息设置 timestamp_attribute 元数据。然后,Fixedwindow 将默认使用 Event time triggers,如果我正确理解了您的用例,这就是您要查找的内容。
【讨论】:
以上是关于Apache Beam FixedWindows 之间的延迟的主要内容,如果未能解决你的问题,请参考以下文章
在 mac zsh 终端上安装 apache-beam[gcp] 时出错 - “zsh: no match found: apache-beam[gcp]”