【发布时间】:2019-02-19 16:35:26
【问题描述】:
我是 Flink 的新手。 我有一个 Flink 流程序,可以在 10 秒的会话窗口中计算来自 kafka 的内容。
这是我的问题:
会话窗口默认触发器是 FIRE。
Flink Streaming 会将每个窗口的所有 kafka 消息保存在内存中吗?还是只保存聚合的结果。
如果我使用 FIRE_AND_PURGE,会清除什么?
【问题讨论】:
标签: apache-flink flink-streaming
我是 Flink 的新手。 我有一个 Flink 流程序,可以在 10 秒的会话窗口中计算来自 kafka 的内容。
这是我的问题:
会话窗口默认触发器是 FIRE。
Flink Streaming 会将每个窗口的所有 kafka 消息保存在内存中吗?还是只保存聚合的结果。
如果我使用 FIRE_AND_PURGE,会清除什么?
【问题讨论】:
标签: apache-flink flink-streaming
在here 中描述了触发和清除,但简单地说,区别在于 FIRE_AND_PURGE 在触发后会删除窗口的内容。
所有 Flink 的内置窗口分配器(包括会话窗口)都会在适当的时候清除它们的内容,即在任何允许的延迟过期之后。但是清除是作为一个单独的步骤完成的,而不是与触发器触发结合在一起。
Windows 的内容保持在 Flink 状态,因此它们的位置取决于您使用的状态后端。如果您使用基于堆的状态后端,此状态将保存在堆上,如果您使用 RocksDB,则保存在磁盘上。
您的窗口在被清除之前是否保留其全部内容取决于您是否使用增量聚合 - 换句话说,如果您使用的是减少、聚合或折叠,那么只有聚合的持续结果正在存储,否则它是分配给窗口的所有事件的集合。
【讨论】: