目前,我们有一个按预期工作的键控 Window flink 作业。事件进入窗口 - 一些处理是在reduce函数中完成的 - 触发器导致输出到接收器。
现在我们面临的场景是,事件量将扩大,并且密钥窗口需要保持打开的时间长度从几分钟变为数小时/天。
虽然作业定义可能与以前大致相同,但额外的存储要求开始发挥作用。还需要水平扩展,比如横向扩展任务槽、增加存储等
这是推荐的方法吗?即进行扩展以支持增加的事件量和更长的窗口时间?
这在某种程度上感觉很浪费,因为较长的窗口时间也意味着当没有事件进入时窗口仍然不必要地打开?因此,Flink 中是否有一种方法可以在空闲期间将作业状态无缝移动到磁盘,并在窗口中出现新事件时将其恢复?每个窗口都有一个
savepoint
之类的东西?
对于由reduce函数处理的窗口,涉及的状态应该只是一个对象(每个键,每个窗口),所以希望涉及的状态总量不会太大。
您始终可以使用 RocksDB 状态后端,在这种情况下,状态将保留在磁盘上,活动状态位于堆外内存中。