0
点赞
收藏
分享

微信扫一扫

Flink 1.13 StateBackend 与 CheckpointStorage 拆分

小云晓云 2022-02-21 阅读 62
flink

1. 目标

Apache Flink 的持久化对许多用户来说都是一个谜。用户最常见反复提问的问题就是不理解 State、StateBackend 以及快照之间的关系。通过学习可以解答我们的一些困惑,但是这个问题如此常见,我们认为 Flink 的用户 API 应该设计的更友好一些。在过去几年中,我们经常会听到如下误解:

  • 我们使用 RocksDB 是因为我们不需要容错。
  • 我们不使用 RocksDB 是因为我们不想管理外部数据库。
  • RocksDB 可以直接读写 S3 或者 HDFS(相对于本地磁盘)
  • FsStateBackend 会溢写到磁盘,并且与本地文件系统有关系
  • 将 RocksDB 指向网络附加存储,认为 StateBackend 需要容错

邮件列表中的很多问题非常能代表用户在哪里遇到问题,关键是其中许多问题都不是来自新用户!当前的 StateBackend 抽象对于我们许多用户来说太复杂了。所有这些问题的共同点就是误解了数据如何在 TM 上本地存储状态与 Checkpoint 如何持久化状态之间的关系。本文的目的就是介绍 StateBackend 与 Checkpoint 持久化剥离的原因、怎么剥离以及用户怎么迁移。

2. 现状

在 Flink 1.13 版本之前,StateBackend 有两个功能:

  • 提供状态的访问、查询;
  • 如果开启了 Checkpoint,会周期性的向远程持久化存储上传数据和返回元数据给 JobManager。

以上两个功能是混在一起的,即把状态存储(如何在 TM 上本地存储和访问状态)和 Checkpoint 持久化(Checkpoint 如何持久化状态)笼统的混在一起,导致初学者对此感觉很混乱࿰

举报

相关推荐

0 条评论