Flink 源码解读系列 DataStream 窗口分配器 WinowAssigner

Posted @SmartSi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 源码解读系列 DataStream 窗口分配器 WinowAssigner相关的知识,希望对你有一定的参考价值。

在前一篇文章 Flink 源码解读系列 DataStream 窗口 Window 实现 中,我们了解到 Flink 窗口 Window 有两种具体实现,一个是 TimeWindow,一个是 GlobalWindow。有了窗口之后,我们如何将元素分配给窗口呢?在这篇文章中我们重点了解一下窗口分配器 WindowAssigner 是如何将输入流中的元素划分给窗口的。

1. 如何指定窗口分配器

在了解窗口分配器 WindowAssigner 内部实现之前,我们先看一下如何为窗口算子指定窗口分配器。Flink 为我们提供了几种指定窗口分配器的方式,具体取决于输入流是不是 KeyedStream。如果是在 KeyedStream 上使用窗口,可以使用如下三个方法指定窗口分配器:

  • window()
  • timeWindow()
  • countWindow()

如果是在 DataStream 上使用窗口,可以使用如下三个方法指定窗口分配器:

  • windowAll
  • timeWindowAll()
  • countWindowAll()

在 KeyedStream 和 DataStream 上使用窗口的方式基本一致。

1.1 window

在 KeyedStream 上可以通过 window 方法指定窗口分配器,而对于 DataStream 则需要使用 windowAll 方法指定:

以上是关于Flink 源码解读系列 DataStream 窗口分配器 WinowAssigner的主要内容,如果未能解决你的问题,请参考以下文章