如果不配置StateBackend,默认情况下状态存储在哪里?

时间:2018-07-25 06:21:48

标签: apache-flink flink-streaming checkpoint

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

async authenticationHandler(): Promise<boolean> {
  if (this.myToken) {
    const result = await this._auth.validateToken(this.myToken).toPromise();
    if (result.value) {
        // TODO
        console.log('AuthGuard: valid token');

        this.loggedIn.next(true);
        return true;
     } else {
        this.loggedIn.next(false);
        this._router.navigate(['/login']);
        return false;
     }

  } else {
    this.loggedIn.next(false);
    this._router.navigate(['/login']);
    return false;
  }
}

但是我还没有配置任何StateBackend。

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

2 个答案:

答案 0 :(得分:1)

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

没有API可直接访问状态后端中存储的数据。您可以模拟任务管理器故障,并观察到状态已恢复。而且,尽管没有工具可以直接检查这些保存点,但是如果您希望外部化状态,则可以触发一个保存点。

答案 1 :(得分:1)

这不是答案,只是对correct答案的一小部分。我不能写评论引起声誉。

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

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

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

从flink版本1.5.0开始,MemoryStateBackend默认情况下使用异步快照。

有关更多信息,请参见flink_v1.4 docs

相关问题