Python 3.x Apache Beam FixedWindows之间的延迟

Python 3.x Apache Beam FixedWindows之间的延迟,python-3.x,google-cloud-platform,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Python 3.x,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,每秒钟都会收到一条消息。数据流使用ReadFromPubSub和FixedWindows在一分钟内获取此消息一次。我在窗口~6秒和丢失消息之间有延迟(每个窗口有57-63个事件)。如果增加PubSub中的消息数,消息的散布也会增加。如何缩小窗口之间的间隔并在一个窗口中接收每分钟的所有消息?Apache Beam fixed windows使用元素时间戳: 对于pubsub,有两种方式为元素提供时间戳: 将元素放入子主题的时间 要用作元素时间戳的消息值 1是默认值,以使用2 因此,这意味着在发布

每秒钟都会收到一条消息。数据流使用ReadFromPubSub和FixedWindows在一分钟内获取此消息一次。我在窗口~6秒和丢失消息之间有延迟(每个窗口有57-63个事件)。如果增加PubSub中的消息数,消息的散布也会增加。如何缩小窗口之间的间隔并在一个窗口中接收每分钟的所有消息?

Apache Beam fixed windows使用元素时间戳:

对于pubsub,有两种方式为元素提供时间戳:

  • 将元素放入子主题的时间
  • 要用作元素时间戳的消息值
  • 1是默认值,以使用2


    因此,这意味着在发布消息时,要为消息设置timestamp_属性元数据。然后,如果我正确理解了您的用例,那么Fixedwindow将默认使用您正在查找的用例。

    我认为这在中得到了解释,您可以通过在设置PCollection的窗口策略时调用.withAllowedLateness操作来允许延迟数据。下面的代码示例演示了一种窗口策略,该策略允许在窗口结束后两天内延迟数据。有关语义的详细信息,请参见本文。我认为@EnriqueZetina comment是正确的答案。如果您希望我们尝试更新您的代码,请共享您的代码
    pipeline |“Read PubSub Messages”>>beam.io.ReadFromPubSub(topic=input_topic))|“按固定间隔打开窗口”>>beam.WindowInto(Window.FixedWindows(60))|“Filter Canary events”>>beam.Filter(is|Canary| event)|“聚合计数”>>beam.CombineGlobally(logcount).without_defaults()|“Write aggregated sum to GCS”>>beam.ParDo(WriteToGCS(output_path)))