开发者社区> 问答> 正文

Apache Flink:窗口检查点

"我想知道如何检查一个窗口。例如,窗口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小助手 2018-11-28 16:15:49 2183 0
1 条回答
写回答
取消 提交回答
  • flink小助手会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关flink的问题及回答。

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

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

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

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

    2019-07-17 23:16:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载

相关镜像