背景
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 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413197.html
標籤:其他
