1

我有一个用例,其中我正在接收包含不同信息集的事件流,并希望对它们执行聚合。对于这些聚合中的每一个,都需要多个翻转窗口,例如:每日、每周、每月、每年等
。聚合最初是所见计数的基本添加,但后来可能是跨这些事件的一些分析/连接处理。因此,如果一个事件 A 每天发生一次,另一个事件 B 每周发生一次,结果将是这样的:

Daily
     A: 1
     B: 1 (Only for the day it was received)
Weekly
     A: 7
     B: 1
Monthly
     A: 30 (30 day month)
     B: 4 (5 in some cases)
Yearly
     A: 365
     B: 52 (53 in some cases)

用例仅围绕翻滚窗口而不是滑动窗口,我正在研究如何实现此用例。主要问题是我不想等到窗口结束并希望每 10 分钟左右继续接收更新。
我看了一下 flink,我们可以通过一些方法来做到这一点,例如使用 ProcessWindow 函数、增量聚合、流切片、广播状态等,但是由于我对 flink 还很陌生,所以我不完全确定要做什么使用,如果有任何我遗漏的陷阱。

如果有人可以帮助我,那就太好了。

4

1 回答 1

0

在 Flink 上实现 windows 的选择是

  1. Flink SQL
  2. 数据流窗口 API
  3. 一个过程函数

我认为您要求每 10 分钟生成一次更新并不适合 SQL。

至于Window API,内置的TimeWindow窗口分配器不支持月份和年份,产品每10分钟更新一次的要求需要自定义Trigger。通过足够的努力,您可以克服这些限制,但我认为这不值得。

我会改为使用 ProcessFunction 来实现它。Flink 文档中嵌入的培训有一个示例,说明如何使用流程函数来实现翻转时间窗口,您可以将其用作起点。扩展该示例以满足您的要求应该不是很困难。

于 2020-10-01T20:18:19.143 回答