Flink 大尺寸/小提前滑动窗口性能

Posted

技术标签:

【中文标题】Flink 大尺寸/小提前滑动窗口性能【英文标题】:Flink large size / small advance sliding window performance 【发布时间】:2019-10-19 18:27:39 【问题描述】:

我的用例

输入是由 ID 键入的原始事件 我想统计过去 7 天内每个 ID 的事件总数。 输出将每 10 分钟提前一次 逻辑上,这将由大小为 7 天并提前 10 分钟的滑动窗口处理

这个post通过1天的翻滚窗口提出了一个很好的优化解决方案

所以我的逻辑是这样的

env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

val oneDayCounts = joins
  .keyBy(keyFunction)
  .map(t => (t.key, 1L, t.timestampMs))
  .keyBy(0)
  .timeWindow(Time.days(1))

val sevenDayCounts = oneDayCounts
  .keyBy(0)
  .timeWindow(Time.days(7), Time.minutes(10))
  .sum(1)

// single reducer
sevenDayCounts
  .windowAll(TumblingProcessingTimeWindows.of(Time.minutes(10)))

附:忘记单个减速器的性能问题。

问题

但是,如果我理解正确,这意味着由于滑动窗口的性质,单个事件将产生 7*24*6=1008 条记录。所以我的问题是如何减少绝对数量?

【问题讨论】:

【参考方案1】:

有一张 JIRA 票——FLINK-11276——和一张google doc,主题是更有效地执行此操作。

我还建议您查看 paper 和 talk 关于使用流切片的高效窗口聚合

【讨论】:

以上是关于Flink 大尺寸/小提前滑动窗口性能的主要内容,如果未能解决你的问题,请参考以下文章

Flink 滑动窗口使用触发器会触发多个窗口的计算

flink 滚动窗口滑动窗口会话窗口全局窗口

11.Flink四大基石Window窗口的分类Flink提供了很多各种场景用的WindowAssigner基于时间的滚动和滑动基于时间的滚动和滑动窗口基于数量的滚动和滑动

11.Flink四大基石Window窗口的分类Flink提供了很多各种场景用的WindowAssigner基于时间的滚动和滑动基于时间的滚动和滑动窗口基于数量的滚动和滑动

Flink 滚动窗口滑动窗口详解

Flink 滑动计数窗口行为