关于程序员:Flink使用Pod-Template将状态快照CheckpointSavepoint存储在NFS

53次阅读

共计 1567 个字符,预计需要花费 4 分钟才能阅读完成。

背景

Flink 版本 1.13.3,应用 native k8s 部署模式,原采纳 HDFS 作为状态快照(Checkpoint、Savepoint)的存储地址,然而因为仅应用了其 HDFS 作为状态快照存储地址,且 Hadoop 框架较重,在 k8s 集群中占用大量资源,现思考将其替换为更轻量级的分布式文件系统——NFS。

状态后端参数设置

从 Flink1.13 开始,状态后端分为两种:HashMapStateBackend、EmbeddedRocksDBStateBackend。如果不显示指定状态后端,则 Flink 会应用 HashMapStateBackend。

状态后端 状态内存中存储地位 是否反对异步快照
HashMapStateBackend JVM 堆内存
EmbeddedRocksDBStateBackend RocksDB(堆外托管内存)

两者的实用场景及优缺点详见 官网。

本文应用 EmbeddedRocksDBStateBackend + FileSystemCheckpointStorage 的形式存储。算子状态存储在 RocksDB 数据库中,Checkpoint 和 Savepoint 存储在挂载到 jobmanager 的文件中。参数设置如下:

state.backend: rocksdb
state.checkpoint-storage: filesystem
state.checkpoints.dir: /opt/flink/checkpoint
state.savepoints.dir: /opt/flink/Savepoint
kubernetes.pod-template-file: /opt/flink/conf/pod-template.yaml

pod-template

因为存储 Checkpoint 和 Savepoint 的文件须要被所有的 taskmanager 和 jobmanager 拜访到,本文应用 PV、PVC 挂载 NFS(NFS 的装置与应用请自行百度) 文件。能够应用 kubernetes.pod-template-file 参数指定 pod-template.yaml 寄存在本地的文件地位,通过该 yaml 文件指定 Checkpoint、Savepoint 的存储地位。
pod-template.yaml 如下:

apiVersion: v1
kind: Pod
spec:
  containers:
   # Do not change the main container name
    - name: flink-main-container
      volumeMounts:
        - mountPath: /opt/flink/Checkpoint
          name: Checkpoint
        - mountPath: /opt/flink/Savepoint
          name: Savepoint
  volumes:
    - name: Checkpoint
      persistentVolumeClaim:
        claimName: flink-checkpoint-pvc
    - name: Savepoint
      persistentVolumeClaim:
        claimName: flink-savepoint-pvc

另外该 yaml 文件还能够依据优先级设置 JobManager 和 TaskManager 的其余参数:

  • Defined by Flink:用户无奈配置。
  • Defined by the user:用户能够自在指定,Flink 框架不会设置。该值会首先应用显式配置,而后是 pod-template.yaml 里的值,如果没有指定,应用默认值。
  • Merged with Flink:Flink 值与用户定义值合并,若名称雷同,应用 Flink 值。

PV 中所应用到的 PVC、StorageClass 等部署文件,可在 gzh “HEY DATA“ 后盾回复 ”pod-template“ 后取得。

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0