当前位置:   article > 正文

Flink使用Pod Template将状态快照(Checkpoint、Savepoint)存储在NFS_flink 保存快照的savepoint

flink 保存快照的savepoint

背景

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

状态后端参数设置

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

状态后端状态内存中存储位置是否支持异步快照
HashMapStateBackendJVM 堆内存
EmbeddedRocksDBStateBackendRocksDB(堆外托管内存)

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

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

  1. state.backend: rocksdb
  2. state.checkpoint-storage: filesystem
  3. state.checkpoints.dir: /opt/flink/checkpoint
  4. state.savepoints.dir: /opt/flink/Savepoint
  5. 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 如下:

  1. apiVersion: v1
  2. kind: Pod
  3. spec:
  4. containers:
  5. # Do not change the main container name
  6. - name: flink-main-container
  7. volumeMounts:
  8. - mountPath: /opt/flink/Checkpoint
  9. name: Checkpoint
  10. - mountPath: /opt/flink/Savepoint
  11. name: Savepoint
  12. volumes:
  13. - name: Checkpoint
  14. persistentVolumeClaim:
  15. claimName: flink-checkpoint-pvc
  16. - name: Savepoint
  17. persistentVolumeClaim:
  18. 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"后获得。

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号