Apache梁开窗奇怪的行为

时间:2019-01-20 22:23:06

标签: python apache apache-beam windowing

我用Python开发了一个示例光束管道,该管道从pubsub订阅中接收一些数据(数据元素是具有该年龄的人的名字,目的是计算固定窗口中有多少特定年龄的人)。

FixedWindow设置为30秒,无需其他配置。

问题是输出是随机触发的,在第一个输出之后,管道开始在当前窗口和下一个应该在60秒后发出结果的下一个窗口之间发出输出数据(例如5或6个输出)。

    with beam.Pipeline(options=pipeline_options) as p:
    data = p | ReadFromPubSub(topic=known_args.input, with_attributes=True, timestamp_attribute="timestamp")
    transformed = (data                                                              
                   | 'FormatMessage' >> beam.Map(format_message)                                              
                   | 'Add Timestamp: %s' >> beam.ParDo(AddTimestampDoFn())
                   | beam.WindowInto(window.FixedWindows(30))
                   | "Filter" >> beam.Filter(filter_names, known_args.rules)
                   | "ReMap" >> beam.Map(lambda x: (x['data']))                                                                  
                   | beam.ParDo(CollectTimings())                  
                   | 'Group' >> beam.GroupByKey()
                   | 'Count' >> beam.CombineValues(beam.combiners.CountCombineFn())
                   )        

    serialized = (transformed
                  | beam.Map(lambda x: json.dumps(x))
                  | beam.Map(printresults)
                 )

    serialized | "Write To PubSub" >> WriteStringsToPubSub(known_args.output)

据我了解,根据Beam文档,我应该每30秒接收一次输出(如果至少有一个输入数据),但是我在窗口内得到了多个输出。

这种行为可能是什么原因?

0 个答案:

没有答案