返回介绍

坚持保证

发布于 2025-05-02 18:19:22 字数 1241 浏览 0 评论 0 收藏

这些 FileSystem 及其 FsDataOutputStream 实例用于持久存储数据,既用于应用程序的结果,也用于容错和恢复。因此,必须明确定义这些流的持久性语义。

持久性保证的定义

如果满足两个要求,则写入输出流的数据被认为是持久的:

  1. 可见性要求: 必须保证能够访问该文件的所有其他进程,计算机,虚拟机,容器等在给定绝对文件路径时始终看到数据。此要求类似于 POSIX 定义的 close-to-open 语义,但仅限于文件本身(通过其绝对路径)。
  2. 持久性要求: 必须满足文件系统的特定持久性/持久性要求。这些特定于特定文件系统。例如,{@link LocalFileSystem}不为硬件和 算子操作系统的崩溃提供任何持久性保证,而复制的分布式文件系统(如 HDFS)通常在出现 n 个 并发节点故障时保证持久性,其中 n 是复制因子。

不需要更新文件的父目录(以便在列出目录内容时显示文件),以使文件流中的数据被认为是持久的。对于目录内容的更新最终只是一致的文件系统来说,这种放松很重要。

FSDataOutputStream 必须保证数据的持久性,一旦调用写入的字节 FSDataOutputStream.close() 回报。

例子

  • 对于 容错的分布式文件系统 ,一旦数据被 文件系统 接收和确认,数据就被认为是持久的,通常是通过复制到法定数量的机器( 持久性要求 )。此外,绝对文件路径必须对可能访问该文件的所有其他计算机可见( 可见性要求 )。

    数据是否已达到存储节点上的非易失性存储取决于特定文件系统的特定保证。

    对文件的父目录的元数据更新不需要达到一致状态。允许某些机器在列出父目录的内容时看到该文件而其他机器没有,只要在所有节点上都可以通过其绝对路径访问该文件。

  • 一个 本地文件系统 必须支持 POSIX 贴近开放 语义。由于本地文件系统没有任何容错保证,因此不存在进一步的要求。

    以上特别暗示,当从本地文件系统的角度考虑持久性时,数据可能仍然在 OS 高速缓存中。导致 算子操作系统缓存丢失数据的崩溃对本地计算机来说是致命的,并且不受 Flink 定义的本地文件系统保证的影响。

    这意味着仅保证可以从本地计算机的故障中恢复仅写入本地文件系统的计算结果,检查点和保存点,从而使本地文件系统不适合生产设置。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。