Flink流:TriggerResult.FIRE和TriggerResult.FIRE_AND_PURGE之间的区别

时间:2019-02-19 03:09:42

标签: apache-flink flink-streaming

我是Flink的新手。 我有一个Flink流传输程序,可以在10秒的会话窗口中计数来自kafka的内容。

这是我的问题:

会话窗口的默认触发器为FIRE。

Flink流式传输会将每个窗口的所有kafka消息保留在内存中,还是仅保留聚合结果。

如果我使用FIRE_AND_PURGE,将清除什么?

1 个答案:

答案 0 :(得分:1)

here描述了触发和清除,但简单地说,区别是FIRE_AND_PURGE在触发后删除了窗口的内容。

Flink的所有内置窗口分配器(包括会话窗口)都在适当的时候(即在允许的延迟过期后)负责清除其内容。但是清除操作是一个单独的步骤,而不是与触发器触发结合使用。

Windows的内容保持Flink状态,因此它们的位置取决于您使用的后端状态。如果使用基于堆的状态后端,则此状态将保留在堆上;如果使用RocksDB,则将保留在磁盘上。

在清除窗口之前,窗口是否保留其全部内容取决于您是否使用增量聚合-换句话说,如果使用减少,聚合或折叠,则仅聚合的持续结果正在存储,否则它是分配给窗口的所有事件的集合。