如果不配置StateBackend,state默认存储在哪里?
Where is the state stored by default if I do not configure a StateBackend?
在我的程序中我启用了检查点,
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(5000);
但是我还没有配置任何StateBackend。
检查点状态存储在哪里?我能以某种方式检查这些数据吗?
默认状态后端将工作状态保存在各种任务管理器的堆上,并将其备份到作业管理器堆。这就是所谓的MemoryStateBackend
.
没有API可以直接访问状态后端中存储的数据。您可以模拟任务管理器故障并观察状态是否已恢复。如果您希望外部化状态,您可以改为触发一个保存点,尽管没有直接检查这些保存点的工具。
这不是答案,而是 答案的小补充。由于名誉原因我不能写评论。
如果您使用早于 v1.5 的 flink 版本,则默认状态后端会将异步快照的 MemoryStateBeckend 设置为 false。因此,您将在您的情况下每 5 秒使用一次同步保存检查点(您的管道将每 5 秒阻塞一次以保存检查点)。
要避免这种情况,请使用显式构造函数:
env.setStateBackend(new MemoryStateBackend(maxStateSize, true));
从flink v1.5.0版本开始,MemoryStateBackend默认使用异步快照
有关详细信息,请参阅 flink_v1.4 docs
在我的程序中我启用了检查点,
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(5000);
但是我还没有配置任何StateBackend。
检查点状态存储在哪里?我能以某种方式检查这些数据吗?
默认状态后端将工作状态保存在各种任务管理器的堆上,并将其备份到作业管理器堆。这就是所谓的MemoryStateBackend
.
没有API可以直接访问状态后端中存储的数据。您可以模拟任务管理器故障并观察状态是否已恢复。如果您希望外部化状态,您可以改为触发一个保存点,尽管没有直接检查这些保存点的工具。
这不是答案,而是
如果您使用早于 v1.5 的 flink 版本,则默认状态后端会将异步快照的 MemoryStateBeckend 设置为 false。因此,您将在您的情况下每 5 秒使用一次同步保存检查点(您的管道将每 5 秒阻塞一次以保存检查点)。
要避免这种情况,请使用显式构造函数:
env.setStateBackend(new MemoryStateBackend(maxStateSize, true));
从flink v1.5.0版本开始,MemoryStateBackend默认使用异步快照
有关详细信息,请参阅 flink_v1.4 docs