apache flink窗口顺序

Posted

技术标签:

【中文标题】apache flink窗口顺序【英文标题】:apache flink window order 【发布时间】:2016-06-14 10:46:19 【问题描述】:

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

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

但是,这篇文章的日期是 2015 年 7 月,现在已经快一年了。此功能是否已实现,有人可以指出任何相关文档和/或示例。

【问题讨论】:

【参考方案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)

事件时间和窗口在文档(here 和 here)和几篇博文(here、here、here 和 here)中有详细说明。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于apache flink窗口顺序的主要内容,如果未能解决你的问题,请参考以下文章

Flink---窗口函数

Flink---窗口函数

Flink---窗口函数

Apache Flink - Window

Flink AggregateFunction窗口函数,执行步骤流程与实例

Flink AggregateFunction窗口函数,执行步骤流程与实例