Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/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 dataflow 如何";“利率限额”;Apache Beam中的PCollection?_Google Cloud Dataflow_Apache Beam_Stream Processing - Fatal编程技术网

Google cloud dataflow 如何";“利率限额”;Apache Beam中的PCollection?

Google cloud dataflow 如何";“利率限额”;Apache Beam中的PCollection?,google-cloud-dataflow,apache-beam,stream-processing,Google Cloud Dataflow,Apache Beam,Stream Processing,我有一个看起来很常见的问题,但我不知道Beam推荐的解决方案是什么 我有一个原始事件流,我正在寻找两个独立的事件来满足滑动窗口(60分钟)内的条件,以便它“触发”警报 使用滑动窗口很容易做到这一点,但问题在于它的滑动特性,我可以在多个窗口中有效地获得该警报。如何最终获得只输出一次此类警报的PCollection(在特定时间段/冷却持续时间内) 我最初认为最近的有状态处理特性将是我的解决方案,但后来意识到它只在一个窗口内工作。侧面输入也是如此。因此,在我看来,我需要一种打破窗口的方法,并在一个(可

我有一个看起来很常见的问题,但我不知道Beam推荐的解决方案是什么

我有一个原始事件流,我正在寻找两个独立的事件来满足滑动窗口(60分钟)内的条件,以便它“触发”警报

使用
滑动窗口
很容易做到这一点,但问题在于它的滑动特性,我可以在多个窗口中有效地获得该警报。如何最终获得只输出一次此类警报的PCollection(在特定时间段/冷却持续时间内)


我最初认为最近的有状态处理特性将是我的解决方案,但后来意识到它只在一个窗口内工作。侧面输入也是如此。因此,在我看来,我需要一种打破窗口的方法,并在一个(可能的会话)窗口中处理警报“触发”。但是文档中没有提到任何有效地将元素重新分配给新windows的方法

有趣的应用程序

总结一下:

  • 听起来,对于您的用例来说,“滑动窗口”意味着持续滑动。您可以选择最小粒度,但它不一定是自然的
  • 您感兴趣的每一组事件应该只产生一个输出
有几种方法可以实现这一点,具体取决于应用程序的其他部分

一种方法是将数据保留在全局窗口中并使用状态。您将不得不自己管理延迟——删除太晚的元素,考虑数据的无序性,等等,并且通常保持状态有界


另一种方法是将滑动窗口与
组合
或状态(基本上是您已经尝试过的)一起使用,然后重新打开警报窗口并消除重复。您可以为此使用固定窗口,因为警报应具有确定的时间戳;窗口的结尾将控制何时自动收集状态,以便方便使用。

我最后使用了一种重新窗口策略,类似于@Kenn建议的

因此,我有来自滑动窗口集合的警报,我将其重新窗口化到会话窗口中

.apply(Window.remerge())            
.apply(Window.into(Sessions.withGapDuration(Duration.standardHours(1))))

在这个窗口集合中,我只需执行一个
groupBy
,就可以获得会话的所有
警报
,在此期间,我可以应用我的冷却逻辑,即每小时只发出一次警报。

Kenn,感谢您的回复。实际上,我忘了用我的发现更新这个问题。关于您的建议:>一种方法是将数据保留在全局窗口中并使用状态。这确实是一种选择,但我会不会错过使用beam then的要点?>另一种方法是使用带联合收割机或状态的滑动窗口(基本上是您已经尝试过的),然后重新打开警报窗口并消除重复。我有效地采用了这个解决方案。但是,固定窗口不起作用,因为我可能在窗口的后半部分有一个警报,从而重置“冷却”,因此下一个窗口中的任何早期警报都不会被触发。