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]”

如何运行 Apache Beam 集成测试?

Python 上的 Apache Beam 将 beam.Map 调用相乘

Apache Beam - 跳过管道步骤

什么是 Apache Beam? [关闭]

apache beam ElasticSearchIO 遇到异常后job中断执行 自己定制beam IO