我有一个发出整数事件的源。
对于每个新的整数,我想将其与前一小时流式传输的所有整数相加,并将该值发送到下一步。
计算当前事件的整数与前一小时内所有事件的整数之和,然后发出该和的惯用方法是什么?我能想到两种选择,但感觉我错过了什么:
- 使用一小时大小的滑动窗口,滑动一毫秒。这将确保始终有一个窗口,从最近的事件精确到一个小时
- 创建我自己的过程函数,跟踪以前小于或等于一小时的整数。使用此状态进行计算
您可以使用over窗口使用Flink SQL来实现这一点。类似这样的东西:
SELECT
SUM(*) OVER last_hour AS rolling_sum
FROM Events
WINDOW last_hour AS (
ORDER BY eventTime
RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW
)
有关更多信息,请参阅Flink SQL文档中的OVER Aggregation。您也可以使用表API,请参阅通过Windows。