apache flink窗口顺序

时间:2016-06-14 10:46:20

标签: apache-flink flink-streaming

使用Apache Flink我想创建一个按照存储在Kafka事件中的时间戳排序的流窗口。根据以下文章,这没有实现。

https://cwiki.apache.org/confluence/display/FLINK/Time+and+Order+in+Streams

然而,这篇文章的日期是2015年7月,现在差不多一年之后。是否已实现此功能,并且有人可以指向任何相关文档和/或示例。

2 个答案:

答案 0 :(得分:1)

Apache Flink支持基于事件时间戳的流窗口。 在Flink中,这个概念被称为事件时间。

为了支持事件时间,您必须从每个事件中提取时间戳(长值)。此外,您需要支持处理带有无序时间戳的事件所需的所谓水印。

给定具有提取时间戳的流,您可以按如下方式定义窗口总和:

val stream: DataStream[(String, Int)] = ...
val windowCnt = stream
  .keyBy(0) // partition stream on first field (String)
  .timeWindow(Time.minutes(1)) // window in extracted timestamp by 1 minute
  .sum(1) // sum the second field (Int)

文档(herehere)以及多篇博客文章(herehere,{{3}详细介绍了事件时间和窗口}和here)。

答案 1 :(得分:0)

按时间戳排序仍然不支持开箱即用,但您可以根据元素中的时间戳进行窗口化。我们称之为事件时间窗口。请看这里:https://ci.apache.org/projects/flink/flink-docs-master/apis/streaming/windows.html