如何在Flink中处理从现在()到-10分钟的事件

6ovsh4lw  于 2023-09-28  发布在  Apache
关注(0)|答案(1)|浏览(125)

我想创建一个流Flink应用程序,它将处理福尔斯在不同时间窗口的最新事件时间戳内的事件,例如。10分钟,1天,1个月。
假设我在12:01得到了一个事件,这是我最新的时间戳,所以该过程将获取从12:01到12:11产生的所有事件。对于其他窗口大小也是如此。
我不确定我是否理解windows是如何工作的,但我知道我有一个流,事件将在窗口中处理,但窗口有多个输出,窗口有一个定义的开始和结束,而不是移动的开始-结束时间戳。我猜这看起来像一个滑动窗口,其中流是一个固定大小的时间戳,所以新事件弹出旧事件,因为他们来,如果他们是10分钟的窗口。
这是我在flink或我的数据流(也许是Kafka)中设置的吗?
我对Flink比较陌生,我检查了滑动窗口文档,但它似乎提供了不同的功能。

mnemlml8

mnemlml81#

一个窗口可能是你要找的。比如说,

SELECT order_id, order_time, amount,
  SUM(amount) OVER (
    PARTITION BY product
    ORDER BY order_time
    RANGE BETWEEN INTERVAL '10' MINUTE PRECEDING AND CURRENT ROW
  ) AS ten_minute_prod_amount_sum
FROM Orders

为每个订单计算在当前订单之前的10分钟期间内相同产品的所有订单的金额之和。
OVER窗口的文档在这里。
如果你真的需要向前看,而不是向后看,我很抱歉地说,Flink的OVER窗口只支持PRECEDING,而不是FOLLOWING,但你可以使用MATCH_RECOGNIZE构建一个解决方案。使用MATCH_RECOGNIZE进行模式匹配的文档是here
我想您正在寻找使用DataStream API的解决方案。DataStream窗口函数都不处理此用例。您要么需要在API堆栈中向上移动到Table/SQL API,要么向下移动一个级别,使用流程函数构建解决方案。

相关问题