java - Flink keyby 然后 window 然后聚合所有结果?

标签 java apache-flink

这是我想在 Apache Flink 中执行的操作:

输入DataStream<T>然后按字段键 x然后做一个每分钟滑动一次的 15 分钟窗口,聚合每个键的结果 ( x ),然后将所有这些聚合聚合到一个列表中

基本上,如果我有一个输入流,[(a, 1, Time 1), (b, 6, Time 14), (b, 1, Time 12)] ,我希望结果是 [(a, 1), (b, 7)] ,通过在 15 分钟滑动窗口上操作并针对此特定滑动窗口。

这可能吗?

最佳答案

是的,这确实是可能的。 Flink 的窗口 API 允许您使用非键控窗口跟踪键控窗口。 This exercise来自 Apache Flink 培训网站的内容涵盖了这种模式。另外,请在 this page in the documentation 上有关 Windows 的“惊喜”列表中查找标题为“Windows 可以跟随 Windows”的部分。 .

大致上,您将执行以下操作:

stream
    .keyBy(e -> e.x)
    .timeWindow(Time.minutes(15), Time.minutes(1))
    .process(new ProduceKeyedResults())
    .timeWindowAll(Time.minutes(15), Time.minutes(1))
    .process(new ProduceOverallResults())

您可能更愿意使用 ReduceFunctionAggregateFunction 来代替 WindowProcessFunctions 或作为其补充。

您会注意到,时间窗口运算符生成的事件具有反射(reflect)窗口本身时间边界的时间戳,而不是与落入窗口的事件的时间戳有关。但事件确实有时间戳,并且流仍然带有水印——因此再次进行时间戳分配是没有意义的。 (还值得注意的是,由键控窗口生成的流不再是键控的。)

关于java - Flink keyby 然后 window 然后聚合所有结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577863/

相关文章:

java - 编辑.java文件并重新编译

java - Libgdx 如何获取目录中的文件列表?

java - 创建 ECDSA DER 编码签名

apache-storm - Flink 和 Storm 之间的主要区别是什么?

apache-flink - 滑动时间窗口的 F​​link 性能问题

java - 使用来自 Blender 2.62+ 的 .obj 文件,在 java 中与 Eclipse for Android openGL ES

java - java类JAVA中的Spring xml配置重写

java - Flink Streaming - 在windows中应用函数

apache-flink - 弗林克 : Difference between MaxOutOfOrderness and AllowedLateness

apache-flink - Apache 弗林克 : How can I reload an updated jar without restarting my job?