Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform ApacheBeam中afterwatermark触发器和默认触发器的区别是什么?_Google Cloud Platform_Triggers_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud platform ApacheBeam中afterwatermark触发器和默认触发器的区别是什么?

Google cloud platform ApacheBeam中afterwatermark触发器和默认触发器的区别是什么?,google-cloud-platform,triggers,google-cloud-dataflow,apache-beam,Google Cloud Platform,Triggers,Google Cloud Dataflow,Apache Beam,根据apachebeam文档 AfterWatermark触发器在事件时间运行。后水印 触发器在水印通过后发出窗口内容 窗口结束,基于附加到数据的时间戳 元素。水印是一个全局进度度量,是Beam的 在任何给定点,管道中输入完整性的概念。 AfterWatermark仅在水印经过 窗户 PCollection的默认触发器基于事件时间,并且 当光束的水印通过窗口时,发射窗口的结果 窗口结束,然后在每次延迟数据到达时激发。 但是,如果同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,并且延迟

根据apachebeam文档

AfterWatermark触发器在事件时间运行。后水印 触发器在水印通过后发出窗口内容 窗口结束,基于附加到数据的时间戳 元素。水印是一个全局进度度量,是Beam的 在任何给定点,管道中输入完整性的概念。 AfterWatermark仅在水印经过 窗户

PCollection的默认触发器基于事件时间,并且 当光束的水印通过窗口时,发射窗口的结果 窗口结束,然后在每次延迟数据到达时激发。 但是,如果同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,并且延迟 数据被丢弃

我尝试实现这两种方法,并使用固定窗口获得类似的输出

带后水印触发器:

lines |'timestamp' >> beam.Map(get_timestamp)
           | 'window' >> beam.WindowInto(
            window.FixedWindows(20),
            trigger=trigger.AfterWatermark(),
            accumulation_mode=trigger.AccumulationMode.DISCARDING
        )
        | 'CountGlobally' >> beam.CombineGlobally(
                beam.combiners.CountCombineFn()
            ).without_defaults() 
        | 'printnbrarticles' >> beam.ParDo(PrintFn())
        | 'jsondumps' >> beam.Map(lambda x: json.dumps(x))
        | 'encode' >> beam.Map(lambda x: x.encode('utf-8'))
        | 'send_to_Pub/Sub' >> beam.io.WriteToPubSub(known_args.out_topic)
    )
使用默认触发器:

lines |'timestamp' >> beam.Map(get_timestamp)
           | 'window' >> beam.WindowInto(
            window.FixedWindows(20),
        )
        | 'CountGlobally' >> beam.CombineGlobally(
                beam.combiners.CountCombineFn()
            ).without_defaults() 
        | 'printnbrarticles' >> beam.ParDo(PrintFn())
        | 'jsondumps' >> beam.Map(lambda x: json.dumps(x))
        | 'encode' >> beam.Map(lambda x: x.encode('utf-8'))
        | 'send_to_Pub/Sub' >> beam.io.WriteToPubSub(known_args.out_topic)
    )

您没有看到差异,因为您没有最新的数据。如文档中所述,Afterwatermark仅在水印之后触发一次,默认触发器在水印之后调用,并且在每次延迟数据到达时调用

此外,使用Afterwatermark触发器,您可以配置早期数据(数据在窗口打开之前到达)或延迟数据(在水印之后到达)的其他行为(和调用)

无法使用默认触发器自定义此设置