减少并加入窗口

时间:2016-06-02 05:56:22

标签: apache-flink

我需要在窗口上加入两个键控流。但我需要首先减少两个流,然后在同一窗口中的聚合上应用连接。

我花了一些时间查看Flink API,发现WindowedStream中存在这样的apply函数

public SingleOutputStreamOperator apply(ReduceFunction reduceFunction,WindowFunction function)

但是我无法在JoinedStream中找到类似的功能。 题:    这对Flink来说是一个有用的增强吗?    有没有我现在可以使用的解决方法。

1 个答案:

答案 0 :(得分:1)

如果使用处理时语义,则可以单独将窗口聚合应用于每个输入流,并将结果提供给连接(当然,聚合和连接都必须使用相同的窗口定义)。 / p>

这样的事情:

WindowAssigner w = ...
reducedStream1 = stream1.keyBy(...).window(w).apply(...);
reducedStream2 = stream2.keyBy(...).window(w).apply(...);
reducedStream1.join(reducedStream2)
              .where(...).equalTo(...)
              .window(w).apply(...);

对于处理时间,您需要使用以下命令编写自己的自定义运算符:

stream1.coGroup(stream2)
       .where(...).equalTo(...)
       .window(...).apply(CoGroupFnction);