"我想知道如何检查一个窗口。例如,窗口wordcount:
DataStream> 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将非键控流转换为键控流。"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。