Flink 窗口 —— 驱逐器

0
(0)

Flink的窗口模型允许在指定WindowAssigner和Trigger之外指定一个可选的驱逐器。这可以通过使用evictor(…)方法来完成(见本文开头)。驱逐器能够在触发器触发后以及在应用窗口函数之前和/或之后从窗口中删除元素。

/**
 * Optionally evicts elements. Called before windowing function.
 *
 * @param elements The elements currently in the pane.
 * @param size The current number of elements in the pane.
 * @param window The {@link Window}
 * @param evictorContext The context for the Evictor
 */
void evictBefore(Iterable<TimestampedValue<T>> elements, int size, W window, EvictorContext evictorContext);

/**
 * Optionally evicts elements. Called after windowing function.
 *
 * @param elements The elements currently in the pane.
 * @param size The current number of elements in the pane.
 * @param window The {@link Window}
 * @param evictorContext The context for the Evictor
 */
void evictAfter(Iterable<TimestampedValue<T>> elements, int size, W window, EvictorContext evictorContext);

evictBefore()包含要在窗口函数之前应用的收回逻辑,而evictAfter()包含要在窗口函数之后应用的收回逻辑。在window函数的应用程序之前被逐出的元素将不会被window函数处理。

Flink附带了三个预实现的驱逐器。这些都是:

  • CountEvictor: 在窗口中保持用户指定的元素数量,并丢弃窗口缓冲区开头的剩余元素。
  • DeltaEvictor: 接受一个DeltaFunction和一个阈值,计算窗口缓冲区中最后一个元素和其余每个元素之间的增量,并删除增量大于或等于阈值的元素。
  • TimeEvictor: 接受以毫秒为单位的interval作为参数,对于给定的窗口,它会在其元素中查找最大时间戳max_ts,并删除时间戳小于max_ts – interval的所有元素。.

默认情况下,所有预实现的 evictors 在窗口函数之前应用它们的逻辑。

指定回收器可以防止任何预聚合,因为在应用计算之前,窗口的所有元素都必须传递给回收器。这意味着带有驱逐器的窗口将创建更多的状态。

Flink不保证窗口中元素的顺序。这意味着,尽管驱逐器可以从窗口的开头删除元素,但这些元素并不一定是最先或最后到达的元素。

这篇文章有用吗?

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?