当前位置: 首页 > 知识库问答 >
问题:

如何在 Flink 中通过更新执行多个窗口聚合?

解修然
2023-03-14

我有一个用例,其中我收到包含不同信息集的事件流,并希望对它们执行聚合。对于这些聚合中的每一个,都需要多个翻滚窗口,例如:每日,每周,每月,每年等。
聚合最初是所看到的计数的基本加法,但后来可能是对这些事件的一些分析/联接处理。因此,如果一个事件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很陌生,所以我不完全确定要使用什么,以及是否有任何陷阱,我错过了。

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

共有1个答案

唐信瑞
2023-03-14

在Flink上实现窗口的选择是

  1. Flink SQL
  2. 数据流窗口 API
  3. a 流程函数

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

至于Windows API,内置的TimeWindow窗口分配器不支持数月和数年,并且每10分钟更新一次产品的要求需要自定义触发器。只要付出足够的努力,您就可以克服这些限制,但我认为这不值得。

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

 类似资料:
  • 问题内容: 我正在有限的时间里进行学校项目,导致代码混乱和混乱。我正在尝试打开两个jFrame,一个显示聊天界面,另一个显示图像。从第一个窗口调用时,我想调用一个方法,该方法多次更改第二个窗口上的图像,并且之间有一些延迟。但是,图像不会改变。 我认为我的问题是由于在文本窗口中使用了一些示例代码,并试图合并我自己的修改而没有完全理解前者。在尝试查找此问题时,我仅发现人们根据计时器和in来更新其jFr

  • 我们计划将Apache Flink与一个巨大的IOT设置一起使用。客户将向我们发送某种结构化的传感器数据(如sensor_id、sensor_type、sensor_value、timestamp)。我们没有控制每个客户何时发送这些数据,最有可能是实时的,但我们没有保证。我们将所有事件存储在RabbitMQ/Kafka中。更新:我们可以假设每个传感器的事件是按顺序来的。 在开始实施可能的流式管道之

  • 下面是目前为止我所想到的伪代码。任何帮助都将不胜感激!谢谢! 我检查了Table API,但对于流,似乎不支持很多操作,例如OrderBy。

  • 我想将一个交易流聚合成相同交易量的窗口,这是区间内所有交易的交易规模之和。 我能够编写一个自定义触发器,将数据分区到Windows中。代码如下: 上面的代码可以将其划分为大致相同大小的窗口: 现在我喜欢对数据进行分区,以便卷与触发器值完全匹配。为此,我需要稍微修改一下数据,方法是将区间结束时的交易分成两部分,一部分属于正在触发的实际窗口,剩余的超过触发器值的数量必须分配给下一个窗口。 那可以用一些

  • 我想使用早期触发逻辑进行窗口聚合(您可以认为聚合是由窗口关闭或特定事件触发的),我阅读了文档:https://ci . Apache . org/projects/flink/flink-docs-release-1.12/dev/stream/operators/windows . html # incremental-window-aggregate-with-aggregate functi