zoukankan      html  css  js  c++  java
  • Flink的状态管理与恢复机制

    参考地址:https://www.cnblogs.com/airnew/p/9544683.html

    问题一、什么是状态?

    问题二、Flink状态类型有哪几种?

    问题三、状态有什么作用?

    问题四、如何使用状态,实现什么样的API?

    问题五、什么是checkpoint与savepoint?
    问题六、如何使用checkpoint与savepoint?
    问题七、checkpoint原理是什么?

    问题八、什么是有状态的计算?

    问题九、使用checkpoint的作用?

    一、状态

    定义:

    一般指一个具体的 task/operator 某一时刻在内存中的状态(一个中间结果)

    快照(snapshot)

    作用:

    state可以被记录,在失败的情况下可以恢复。

    基本类型:

    Operator state

    Keyed state

    Flink提供一套状态保存的方法,无需在借助第三方存储系统来解决状态存储问题。

    二、Flink状态类型有哪几种?

    按照数据的划分和扩张方式,Flink中大致分为2类:

    (1)Operator State

    1、可以用于所有算子(常用于source,例如 FlinkKafkaConsumer)

    2、一个Operator 实例对应一个State (与 key 无关,唯一绑定到特定 operator)

    3、并发改变时有多种重新分配方式可选

          (1)均匀分配

          (2)合并后每个得到全量

    4、实现 CheckpintedFunction 或 ListCheckpointed 接口

    5、支持的数据结构

    ListState (只支持这一种数据结构)

    (2)Keyed State

    1、只能用在KeyedStream 上的算子中,基于 keyedStream 之上的状态,dataStream.keyBy(),只能在作用于  keyedStream 上的  function/Operator 里使用。

    keyBy 之后的 Operator State,可理解为分区过的 Operator  State。

    每个 并行 keyed Operator 的每个实例的每个 key有一个 keyed state, 即 <paralled-operator-instance,key> 就是一个唯一的状态,由于每个  key 属于一个  keyed operator的

    并行实例,因此我们可以将其简单的理解为  <operator,key>

    2、每个key 对应一个State。(一个Operator 实例处理多个key,访问相应的多个State)

    3、并发改变,State随着Key 在实例间迁移

    4、通过 RuntimeContext 访问  RichFunction

    5、支持的数据结构

    ValueState

    ListState

    ReducingState

    AggregatingState

    FoldingState(不推荐使用,过期了)

    MapState

    注意:状态不一定存储在内部,可能驻留在磁盘或者其他地方

    状态是使用RuntimeContext访问的,因此只能在Rich函数中访问。

    三、状态的表现形式

    Keyed State 和 Operator State ,可以有两种形式存在:原始状态和托管状态。

    managed(托管状态):

    托管状态是由Flink 框架管理的状态,如 ValueState、ListState、MapState等。

    通过框架提供的接口来更新和管理状态的值。

    不需要序列化

    raw(原始状态)

    原始状态是由用户自行管理的具体的数据结构,Flink 在做 checkpoint的时候,使用 byte[] 来读写状态内容,对其内部数据结构一无所知。

    需要序列化

    通常在DataStream 上的状态推荐使用托管的状态,当用户自定义operator时,会使用到原始状态。

    问题八、什么是有状态的计算?

    计算任务的结果不仅仅依赖于输入,还依赖于它的当前状态,其实大多数的计算都是有状态的计算。比如wordcount,给一些word,

    其计算它的count,这是一个很常见的业务场景。count作为输出,在计算的过程中要不断的把输入累加到count上去,

    那么count就是一个state。

    什么是checkpoint?

    checkpoint 则表示了一个 Flink Job ,在一个特定时刻的一份全局状态状态快照,即包含了一个  job 下 所有

    task/operator 某时刻的状态。

    问题九、使用checkpoint(检查点)的作用?

    使用Checkpoint提高程序的可靠性

    用户可以根据程序里面的配置将checkpoint打开,给定一个时间间隔后,框架会按照时间间隔给程序的状态进行备份。

    当发生故障时,Flink会将所有Task的状态一起恢复到Checkpoint的状态。从那个位置开始重新执行。

    Flink也提供了多种正确性的保障,包括:

    AT LEAST ONCE

    Exactly once

    备份为保存在State中的程序状态数据

    Flink也提供了一套机制,允许把这些状态放到内存当中。做Checkpoint 的时候,由Flink去完成恢复。

    从已停止作业的运行状态中恢复

    当组件升级的时候,需要停止当前作业。这个时候需要从之前停止的作业当中恢复,Flink提供了2种机制恢复作业:

    Savepoint(保存点):是一种特殊的checkpoint,只不过不像checkpoint定期的从系统中去触发的,它是用户通过命令触发,存储格式和checkpoint也是不相同的,

    会将数据按照一个标准的格式存储,不管配置什么样,Flink都会从这个checkpoint 恢复,是用来做版本升级一个非常好的工具。

    External Checkpoint:对已有checkpoint的一种扩展,就是说做完一次内部的一次Checkpoint后,还会在用户给定的一个目录中,多

    存储一份checkpoint的数据。

  • 相关阅读:
    Tensorflow 2 flower_photos花卉数据集手动下载、离线安装、本地加载、快速读取
    [CC]ccHObject
    [CC]CC插件初探
    [g2o]一个备忘
    [PCL]keypoint
    [PCL]NDT点云匹配方法
    近邻搜索算法
    点云匹配和ICP算法概述
    [PCL]5 ICP算法进行点云匹配
    [PCL]4 PCL中图像匹配的几个类图
  • 原文地址:https://www.cnblogs.com/ssqq5200936/p/11026735.html
Copyright © 2011-2022 走看看