【问题标题】:Where is the state stored by default if I do not configure a StateBackend?如果我不配置 StateBackend,默认状态存储在哪里?
【发布时间】:2018-07-25 06:21:47
【问题描述】:

在我的程序中,我启用了检查点,

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(5000);

但我没有配置任何 StateBackend。

检查点状态存储在哪里?我可以以某种方式检查这些数据吗?

【问题讨论】:

    标签: apache-flink flink-streaming checkpoint


    【解决方案1】:

    默认状态后端将工作状态保存在各种任务管理器的堆上,并将其备份到作业管理器堆。这就是所谓的MemoryStateBackend

    没有用于直接访问存储在状态后端的数据的 API。您可以模拟任务管理器故障并观察状态已恢复。如果您希望将状态外部化,则可以改为触发保存点,尽管没有工具可以直接检查这些保存点。

    【讨论】:

    • 没有用于直接访问存储在状态后端的数据的 API。您可以模拟任务管理器故障并观察状态已恢复。如果您希望将状态外部化,则可以改为触发保存点,尽管没有直接检查这些保存点的工具。
    【解决方案2】:

    这不是答案,而是correct 答案的一个小补充。名誉原因我写不出来。

    如果您使用较早于 v1.5 的 flink 版本,则默认状态后端将 MemoryStateBeckend 异步快照设置为 false。因此,在您的情况下,您将每 5 秒使用一次同步保存检查点(您的管道将每 5 秒阻塞一次以保存检查点)。

    为避免这种情况,请使用显式构造函数:

    env.setStateBackend(new MemoryStateBackend(maxStateSize, true));

    从flink v1.5.0版本开始,MemoryStateBackend默认使用异步快照。

    欲了解更多信息,请参阅flink_v1.4 docs

    【讨论】:

    • 如果我有连续来自 kafka 主题的流数据,maxStateSize 应该是多少
    • 您可以使用默认值:5242880 字节。但要考虑到 Flink 的文档中有一个警告。警告:将此值的大小增加到超出默认值 (5242880) 时应小心谨慎。检查点状态需要通过有限大小的 RPC 消息发送到 JobManager,并且 JobManager 需要能够在其内存中保存所有聚合状态。
    猜你喜欢
    • 2019-10-04
    • 2017-01-02
    • 2018-08-19
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2017-01-29
    • 2015-11-30
    相关资源
    最近更新 更多