如果不配置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