Apache Flink:窗口检查点



我想知道如何检查窗口。例如,窗口字数:

DataStream<Tuple3<String, Long, Long>> counts =
// split up the lines in pairs (2-tuples) containing: (word,1)
text
.flatMap(new Tokenizer())
.assignTimestampsAndWatermarks(new timestamp())
.keyBy(0)
.timeWindow(Time.seconds(2))
.process(new CountFunction())   

Q1:我应该在CountFunction()中保存什么状态?我需要保存窗口的缓冲区元素吗?我应该使用ListState将缓冲的数据存储在窗口中,并使用ValueState存储当前和值吗?

Q2:当故障发生时,如何处理窗口中的元素?恢复窗口后会发生什么?

谢谢你的帮助。

Flink的窗口API所需的所有状态都由Flink管理,因此您不需要做任何事情。只要启用了检查点,就会根据需要对窗口缓冲区进行检查点和恢复。

通常,CountFunction不会有任何需要检查点的状态。如果作业失败,而CountFunction正在对窗口内容进行迭代,则作业将被重新缠绕,并将使用相同的输入再次调用CountFunction。

如果您确实需要在CountFunction中保持状态,请参阅在ProcessWindowFunction中使用每个窗口的状态,以了解如何执行此操作的信息。听起来你会想要使用globalState(((持续所有时间的状态(,你可以通过传递给进程窗口函数的Context对象来访问它。

虽然您没有键控流,但我建议您使用上面描述的键控状态机制。通过将keyBy与常量键一起使用,可以将非键控流转换为键控流。

最新更新