自定义窗口上的Flink触发



我正在尝试评估我们使用自定义代码在生产中运行的用例的Apache Flink。

因此,假设每个事件都包含一个特定属性 x ,这是一个不断增加的整数。这是一堆连续事件,将此属性设置为n,然后下一个批次将其设置为n 1等。我想将流分解为具有相同值的事件窗口的 x ,然后在每个事件上分别进行一些计算。

因此,我定义了一个全局风格和一个自定义触发器,其中 onement 方法中我检查了任何给定元素的属性,以相对于当前x的保存值(来自状态变量),如果它们有所不同,则结束了我们已经累积了所有事件的X =电流,现在该进行计算并增加状态的X值了。

这种方法的问题在于,下一个逻辑批次(带有x = Current 1)的元素已经被消耗掉,但不是上一批的一部分。有没有办法以某种方式将其放回流中,以便将其正确解释为下一个批次?

或我的方法是完全错误的,有一种更简单的方法可以实现我的需求?

谢谢。

我认为您在正确的轨道上。

Trigger指定何时可以处理窗口,并且可以发出窗口的结果。

WindowAssigner是说要分配哪个窗口元素的部分。因此,我要说您还需要提供WindowAssigner的自定义实现,该实现将分配给所有等于x的元素的窗口。

用flink做到这一点的一种更惯用的方法是使用 stream.keyBy(X).window(...)keyBy(X)通过其对X的特定值来处理分组元素。然后,您可以应用任何喜欢的窗口。在您的情况下,SessionWindow可能是一个不错的选择。在某个可配置的时间内看不到该密钥之后,它将为每个键发射。

对于您必须在流处理系统中始终假设的无序数据,这种方法将更加健壮。

相关内容

  • 没有找到相关文章

最新更新