Apache Flink:Window 个检查点

Apache Flink:Window checkpoint

我想知道如何检查点 a window。例如,windowed 字数:

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())   

Q1CountFunction()我应该保存什么状态?我需要保存 window 的缓冲区元素吗?我应该用ListState把缓存的数据存入window,用ValueState存当前的总和值吗?

Q2:出现故障时,window中的元素是如何处理的? window 恢复后会发生什么?

感谢您的帮助。

Flink 的 windowing API 所需的所有状态都由 Flink 管理——因此您无需执行任何操作。只要启用检查点,window 缓冲区就会根据需要设置检查点和恢复。

通常 CountFunction 不会有任何需要检查点的状态。如果 CountFunction 正在迭代 window 的内容时作业失败,作业将倒带,CountFunction 将使用相同的输入再次调用。

如果您确实需要在 CountFunction 中保持状态,请参阅 Using per-window state in ProcessWindowFunction 以获取有关如何执行此操作的信息。听起来您可能想要使用 globalState()(始终存在的状态),您可以通过传递给进程 window 函数的 Context 对象访问它。

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