背景

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 发布!

Flink使用Pod Template将状态快照(Checkpoint、Savepoint)存储在NFS的更多相关文章

  1. Flink学习(三)状态机制于容错机制,State与CheckPoint

    摘自Apache官网 一.State的基本概念 什么叫State?搜了一把叫做状态机制.可以用作以下用途.为了保证 at least once, exactly once,Flink引入了State和 ...

  2. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink--容错机制(ACK,RDD,基于log和状态快照),消息处理at least once,exactly once两个是关键

    分布式流处理是对无边界数据集进行连续不断的处理.聚合和分析.它跟MapReduce一样是一种通用计算,但我们期望延迟在毫秒或者秒级别.这类系统一般采用有向无环图(DAG). DAG是任务链的图形化表示 ...

  3. Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )

    Percona XtraDB Cluster(下称PXC)高可用集群支持任意节点在运行期间的重启,升级或者意外宕机,即它解决了单点故障问题.那在这个意外宕机或者重启期间,该节点丢失的数据如何再次进行同 ...

  4. Flink架构(四)- 状态管理

    状态管理 之前我们提到过大多数流应用是有状态的.很多operators会不断的访问并更新某中状态,例如一个window中收集了多少条记录,输入源中当前读到的位置,亦或是用户定义的特定operators ...

  5. kubernetes删除pod,pod一直处于Terminating状态

    删除pod,pod一直处于Terminating状态 [root@yxz-cluster01 deploy_yaml]# kubectl get pod -n yunanbao NAME READY ...

  6. k8s控制器和Pod Template的关系

    Pod 本身并不能自愈(self-healing).如果一个 Pod 所在的 Node (节点)出现故障,或者调度程序自身出现故障,Pod 将被删除:同理,当因为节点资源不够或节点维护而驱逐 Pod ...

  7. HDFS CheckPoint && SavePoint

    HDFS CheckPoint && SavePoint 标签(空格分隔): Hadoop HDFS CheckPoint HDFS 将文件系统的元数据信息存放在 fsimage 和一 ...

  8. Flink源码阅读(一)--Checkpoint触发机制

    Checkpoint触发机制 Flink的checkpoint是通过定时器周期性触发的.checkpoint触发最关键的类是CheckpointCoordinator,称它为检查点协调器. org.a ...

  9. Flink源码解读之状态管理

    一.从何说起 State要能发挥作用,就需要持久化到可靠存储中,flink中持久化的动作就是checkpointing,那么从TM中执行的Task的基类StreamTask的checkpoint逻辑说 ...

随机推荐

  1. java中到底什么是继承?

    1.何为继承?What is Inheritance? 在上图中,对于车来讲,汽车就是子类.对于汽车来讲,奔驰就是子类.车是汽车的基类,超类,或说父类.到底什么是继承?马克-to-win,子类把父类的 ...

  2. nodejs全局对象简析

    Global:全局变量 定时器.控制台输出.事件 模块化相关的一些全局变量 path/url相关的一些全局变量 编码相关的 buffer:缓存(简单介绍) Process:进程(重点解析) 一.Glo ...

  3. 在Java中==的一个坑

    观察下面代码,输出结果是什么? public static void main(String[] args) { Integer p = 10000; Integer q = 10000; Syste ...

  4. python基础练习题(题目 使用lambda来创建匿名函数。)

    day34 --------------------------------------------------------------- 实例049:lambda 题目 使用lambda来创建匿名函 ...

  5. spring4 mvc + jpa demo

    BEGIN; pom.xml 的引入的相关jar版本配置 <properties> <project.build.sourceEncoding>UTF-8</projec ...

  6. i2c调试工具分享

    i2c-tools简介 在嵌入式开发仲,有时候需要确认硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试I2C总线的工具--i2c-tools. i2c-tool ...

  7. 事务的隔离级别与MVCC

    提到数据库,你多半会联想到事务,进而还可能想起曾经背得滚瓜乱熟的ACID,不知道你有没有想过这个问题,事务有原子性.隔离性.一致性和持久性四大特性,为什么偏偏给隔离性设置了级别? 一切还得从事务说起. ...

  8. VMWARE vcenter重置root密码

    1\重启VCSA 2\在GNU GRUBc的时候,按住e键,在后面加上一句命令 3.rw init=/bin/bash 4. 按CTRL-X或者按住F10,启动系统 5. 使用passwd命令修改ro ...

  9. openstack命令创建云主机实例

    @ 目录 前言 上传centos镜像 创建实例 创建外网卡 修改安全组规则 创建云主机实例 前言 简单创建云主机实例只需要上传一个测试镜像.创建一张外网卡.创建一个实例类型.修改安全组规则即可 注:这 ...

  10. 前端面试 -HTTP系列

    http和https 的区别? 端口 经济 安全性 响应速度 http 80端口 不需要 明文传输,安全性差 页面响应速度快,使用tcp的3次握手 https 443端口 费钱SSL需要ca 证书 S ...