​ Flink的状态与容错

Flink DataStream State Backend(状态后端) Flink DataStream State Backend(状态后端) State Backend(状态后端) 用Data Stream Api 编写的程序经常是需要保存状态的,如下面情况: Windows中聚集的元素直到被触发计算。在触发之前,需要保存Windows中的元素的状态。 转换(Transformation)函数可以使用Key/Value状态接口存储状态值 转换(Transform... 阅读详情

​ Flink的状态与容错

本文主要运行到Flink以下内容

  • 检查点机制(CheckPoint)

  • 状态管理器(StateBackend)

  • 状态周期(StateTtlConfig)

关系

首先要将state和checkpoint概念区分开,可以理解为checkpoint是要把state数据持久化存储起来,checkpoint默认情况下会存储在JoManager的内存中。checkpoint表示一个Flink job在一个特定时刻的一份全局状态快照,方便在任务失败的情况下数据的恢复。在启动 CheckPoint 机制时,状态会随着 CheckPoint 而持久化,以防止数据丢失、保障恢复时的一致性。状态内部的存储格式、状态在 CheckPoint 时如何持久化以及持久化在哪里均取决于选择的StateBackend。存储多长时间或者说是周期,取决于StateTtlConfig

1 检查点机制(CheckPoint)

Checkpoint 使 Flink 的状态具有良好的容错性,通过 checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。

Checkpoint 在默认的情况下仅用于恢复失败的作业,并不保留,当程序取消时 checkpoint 就会被删除。当然,你可以通过配置来保留 checkpoint,这些被保留的 checkpoint 在作业失败或取消时不会被清除。这样,你就可以使用该 checkpoint 来恢复失败的作业。

参数设置与解释

val env: StreamExecutionEnvironment =
      StreamExecutionEnvironment.getExecutionEnvironment

//只指定两个checkpoint的时间间隔,单位是毫秒
//指定checkpoint时间间隔,并指定checkpoint的模式,是exactly-once(刚好一次)
//还是AT_LEAST_ONCE(至少一次)。
//大多数情况下是exactly-once(默认就是这个模式),少数情况下,如果要求超低延迟的处理情况,才会设置AT_LEAST_ONCE
env.enableCheckpointing(1000,CheckpointingMode.EXACTLY_ONCE) 

// 两种方式
// env.enableCheckpointing(1000)
// env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)

/* 设置checkpoint上一个的结束点到下一个开始点之间的最短时间。
checkpoint触发时,需要一定时间去完成整个checkpoint的过程,
1、这里的时间间隔,指的是上一个checkpoint完成的时间点,到下一个checkpoint开始的时间点的间隔,如果过短,会导致频繁checkpoint,影响性能。假设这个间隔为T
2、而上面设置的checkpoint时间间隔,指的是前一个checkpoint的开始时间到下一个checkpoint的开始时间。所以是始终大于1中的时间间隔的。假设这个间隔为 N

如果T小于这里设置的值,那么无论N设置多少,下一个checkpoint的开始时间必须是5000ms之后。如果T大于这里设置的值,那么正常按照N设置的间隔来触发下一个checkpoint,这里设置的间隔无关了。
*/
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000)

// 设置checkpoint完成的超时时间
env.getCheckpointConfig().setCheckpointTimeout(60000)

// 设置checkpoint的最大并行度
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1)

/*  开启checkpoints的外部持久化,但是在job失败的时候不会自动清理,需要自己手工清理state
DELETE_ON_CANCELLATION:在job canceled的时候会自动删除外部的状态数据,但是如果是FAILED的状态则会保留;
RETAIN_ON_CANCELLATION:在job canceled的时候会保留状态数据*/
env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)

// 当有更近的保存点时,优先采用savepoint来恢复成检查点
env.getCheckpointConfig().setPreferCheckpointForRecovery(true)

目录结构

/user-defined-checkpoint-dir
    /{job-id}
        |
        + --shared/
        + --taskowned/
        + --chk-1/
        + --chk-2/
        + --chk-3/
        ...

SHARED目录保存了可能被多个 checkpoint 引用的文件

TASKOWNED保存了不会被 JobManager 删除的文件

EXCLUSIVE则保存那些仅被单个 checkpoint 引用的文件

2 状态管理器(StateBackend)

可用的 State Backends

  • MemoryStateBackend

  • FsStateBackend

  • RocksDBStateBackend

MemoryStateBackend

在 MemoryStateBackend 内部,数据以 Java 对象的形式存储在堆中。Key/value 形式的状态和窗口算子持有存储着状态值、触发器的 hash table。

在 CheckPoint 时,State Backend 对状态进行快照,并将快照信息作为 CheckPoint 应答消息的一部分发送给 JobManager(master),同时 JobManager 也将快照信息存储在堆内存中。

MemoryStateBackend 能配置异步快照。强烈建议使用异步快照来防止数据流阻塞,注意,异步快照默认是开启的。用户可以在实例化 MemoryStateBackend 的时候,将相应布尔类型的构造参数设置为 false 来关闭异步快照(仅在 debug 的时候使用),例如:

 new MemoryStateBackend(MAX_MEM_STATE_SIZE, false)

FsStateBackend

FsStateBackend 将正在运行中的状态数据保存在 TaskManager 的内存中。CheckPoint 时,将状态快照写入到配置的文件系统目录中。少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其写入到 CheckPoint 的元数据文件中)。

FsStateBackend 默认使用异步快照来防止 CheckPoint 写状态时对数据处理造成阻塞。用户可以在实例化 FsStateBackend 的时候,将相应布尔类型的构造参数设置为 false 来关闭异步快照,例如:

 new FsStateBackend(path, false)

RocksDBStateBackend

RocksDBStateBackend 将正在运行中的状态数据保存在 RocksDB 数据库中,RocksDB 数据库默认将数据存储在 TaskManager 的数据目录。CheckPoint 时,整个 RocksDB 数据库被 checkpoint 到配置的文件系统目录中。少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其存储到 CheckPoint 的元数据文件中)。RocksDBStateBackend 只支持异步快照。

设置 State Backend

后面的案例也以RocksDBStateBackend为例

 val backend:StateBackend = new RocksDBStateBackend("hdfs://djcluster/Test/")
 
 env.setStateBackend(backend)

3 状态周期(StateTtlConfig)

状态引入了TTL(time-to-live,生存时间)机制,支持Keyed State 的自动过期,有效解决了状态数据在无干预情况下无限增长导致 OOM 的问题。对于任何类型 Keyed State 都可以设定状态生命周期(TTL),以确保能够在规定时间内即时清理状态数据。

val config: StateTtlConfig = StateTtlConfig
              .newBuilder(Time.minutes(1))
              .setUpdateType(StateTtlConfig.UpdateType.OnReadAndWrite)
              .setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
              .build()
              
 val mapState = new MapStateDescriptor[String,Any]("aa",classOf[String],classOf[Any])
 
 mapState.enableTimeToLive(config)

参数说明:

  • UpdateType:表示状态时间戳的更新的时机

参数说明
Disabled不更新时间戳
OnCreateAndWrite当状态创建或每次写入时都会更新时间戳
OnReadAndWrite除了在状态创建和写入时更新时间戳外,读取也会更新状态的时间戳
  • StateVisibility:表示对已过期但还未被清理掉的状态如何处理

参数说明
ReturnExpiredIfNotCleanedUp即使这个状态的时间戳表明它已经过期了,但是只要还未被真正清理掉,就会被返回给调用方
NeverReturnExpired那么一旦这个状态过期了,那么永远不会被返回给调用方,只会返回空状态,避免了过期状态带来的干扰

上面是理论论述,下面是代码实现与测试

4.理论实现与测试

描述

通过 nc -lk 8765 在机器上输入逗号隔开的字符串,比如:event,1,1 要保证中间的值和下次输入的值一样,这样keyBy分流到一个分区中,方便测试看到效果。状态值保存到Hdfs上。

def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment =
      StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    val backend:StateBackend = new RocksDBStateBackend("hdfs://cluster/Test/")
    env.setStateBackend(backend)
    env.enableCheckpointing(5000)
    env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)
    env.getCheckpointConfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
    val dataDS: scala.DataStream[String] = env.socketTextStream("localhost", 8765)
    dataDS.map(item => {
      val str = item.split(",")
      (str(0),str(1),str(2))
    }
    )
      .keyBy(_._2)
      .process(
        new KeyedProcessFunction[String,(String, String, String), String] {
          var leastValueState: MapState[String, Any] = _
          override def open(parameters: Configuration): Unit = {
            println("open")
            val config: StateTtlConfig = StateTtlConfig
              .newBuilder(Time.minutes(15))
              .setUpdateType(StateTtlConfig.UpdateType.OnReadAndWrite)
              .setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
              .build()
            val aa = new MapStateDescriptor[String,Any]("aa",classOf[String],classOf[Any])
            aa.enableTimeToLive(config)
            leastValueState = getRuntimeContext.getMapState(aa)
          }
          override def processElement(i: (String, String, String),
                                      ctx: KeyedProcessFunction[String, (String, String, String), String]#Context,
                                      out: Collector[String]): Unit = {
            println(leastValueState.get("3"))

            i._1 match {
              case "order" => leastValueState.put("order", 12)
              case "event" => out.collect("打印event")
              case _ => out.collect("什么都没有")
            }
            out.collect(leastValueState.get("3")+":")
          }
        }

      )
      .uid("bbbbbbb")
      .print()
    env.execute()
  }

打包上传集群测试

执行命令

./bin/flink run -m yarn-cluster 
-yqu spark -c com.wang.StateBackend /usr/local/jars/flink.jar  
-yn 7 -ys 2 -p 14 -ytm 2048m -yjm 2048m

这个不管是你自己亲自kill掉application 或者是某些原因flink任务挂掉,这个时候你就可以这样恢复数据

找到RocksDBStateBackend设置的地址 hdfs://cluster/Test/

找到挂掉任务的checkpoint地址(可以通过Flink历史服务器去找,如果任务少,也可以直接去hdfs上找)

重新启动任务

这边遇到的一个坑就是命令参数位置不对,怎么设置都没有用,也不起效,下次一定记得。刚测试的时候 -s 写在后面的某一个位置,怎么测试都不起效,一直以为代码有问题,查询了好多资料,都是这样写的,没有问题,前前后后折腾好久。最后把 -s 参数调到最前面就神奇的好了......

./bin/flink run -m yarn-cluster 
-s hdfs://cluster/Test/e45509db99014fd47971c6eaf3701f4b/chk-41/_metadata 
-yqu spark -c com.wang.StateBackend /usr/local/jars/flink.jar 
-yn 7 -ys 2 -p 14 -ytm 2048m -yjm 2048m

 

这个时候已经恢复到之前挂掉的数据了

微信公众号:大数据左右手

人要去的地方,除了远方,还有未来
欢迎关注我,一起学习,一起进步!

Flink的状态编程和容错机制概念区分 状态(State)和状态后端(State Backend)在 Apache Flink 中是两个密切相关但不同的概念。状态是为了计算,状态后端是容错。确实,状态(State)和状态后端(State Backend)在 Apache Flink 中是两个密切相关但不同的概念。让我们更清晰地区分这两者,以及更详细地探讨状态本身的作用,以及状态后端在其中扮演的角色。 阅读详情

相关推荐

Flink的状态和容错机制

Flink具有强大的容错机制,可以保证在出现故障时数据的一致性和可靠性。Flink具有强大的容错机制,可以保证在出现故障时数据的一致性和可靠性。Apache Flink是一个分布式流处理和批处理框架,具有强大的状态管理和容错能力。在本文中,我们将详细介绍Flink中的状态管理和容错机制,并提供相应的源代码示例。Apache Flink是一个分布式流处理和批处理框架,具有强大的状态管理和容错能力。在本文中,我们将详细介绍Flink中的状态管理和容错机制,并提供相应的源代码示例。Flink的状态和容错机制。

VqhhMobile的博客 72

Flink之状态后端(StateBackends)

目录(1)状态后端的分类(2)配置状态后端 每传入一条数据,有状态的算子任务都会 读取和更新状态 。由于有效的状态访问对于处 理数据的低延迟至关重要,因此每个并行任务(子任务)都会在本地维护其状态,以确保快速 的状态访问。 状态的存储、访问以及维护,由一个 可插入 的组件决定,这个组件就叫做 状态后端 (state backend) 状态后端主要负责两件事: 本地的状态管理 将检查点(checkpoint)状态写入远程存储 (1)状态后端的分类 状态后端作为一个可插入的组件, 没有固定的配置, 我们可以

蔡政洁的博客 1570

Flink的状态管理和容错机制详解

Flink的状态管理和容错机制使得在大数据处理中能够处理复杂的场景,并保证数据处理的准确性和可靠性。当发生故障时,Flink能够自动将应用程序的状态恢复到最近的检查点,并从故障发生的位置继续处理数据。Flink是一个开源的分布式流处理框架,它提供了强大的状态管理和容错机制,使得在大数据处理中能够保证数据的准确性和可靠性。内存状态是Flink默认的状态管理方式,它将状态存储在TaskManager的堆内存中。在流处理中,状态管理是非常重要的,它用于存储和维护流处理过程中的中间结果和状态信息。

HackGJN的博客 195

Flink学习14---容错机制(四)StateBackend和SavePoint的使用

1. 设置StateBackend 模式,此处以保存到hdfs为例 在flink-conf.yaml中设置 state.backend为filesystem; 设置state.backend.fs.checkpointdir 即checkpoints的保存路径。 也可在程序中指定checkpoints的保存路径。 env.setStateBackend(new FsStateBackend("hdfs://192.168.***.***:9000/flink/checkpoints")); 注

zhuzuwei的博客 1467

Flink原理与实战(java版)#第5章 Flink的状态与容错(整章)

介绍了Flink的另外两大核心基石,即状态与容错。简单的说状态就是记录数据的变化过程,容错就是针对数据过程进行恢复。针对如何记录、何时记录以及记录在哪里等等都是状态的核心内容;容错的核心就是针对状态记录的数据变化过程按照不同的策略实现的恢复过程,应对不同的场景使用不同的恢复策略。

alanchanchn的专栏 1万+

Android 的端智能学习路径

基础层:先补齐 Android 进阶(JNI / 性能优化)和 AI 基础概念,无需深入算法开发;核心层:掌握 TFLite 的模型加载、推理、量化,能完成基础端侧推理;落地层:聚焦实战场景(图像 / OCR / 语音),解决工程化问题(模型管理、异常处理);优化层:通过模型量化、硬件加速、工程优化,提升推理性能和用户体验。

hqiangtai的博客 346

Flink(33):Flink之状态恢复和重启策略

目录 0. 相关文章链接 1.重启策略配置方式 2. 重启策略分类 2.1. 默认重启策略 2.2. 无重启策略 2.3.固定延迟重启策略 2.4.失败率重启策略 3. 代码演示 4. 手动重启并恢复 0. 相关文章链接 1.重启策略配置方式 ① 配置文件中 在flink-conf.yml中可以进行配置,示例如下: restart-strategy: fixed-delay restart-strategy.fixed-delay.attempts: 3 restart-...

yang_shibiao的博客 4369

【解决问题】‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

【解决问题】'vue' 不是内部或外部命令,也不是可运行的程序或批处理文件。

weixin_44566194的博客 4万+

Flink状态管理之State Backend(状态的后端存储)

基本介绍 1、默认情况下,state会保存在taskmanager的内存中,checkpoint会存储在JobManager的内存中。 2、state 的store和checkpoint的位置取决于State Backend的配置(env.setStateBackend(…)) 3、一共有三种State Backend:MemoryStateBackend、FsStateBackend、R...

Jiny_li的博客 1万+

ENVI基于Landsat影像构建郑州市2000-2019年遥感生态指数RSEI

本文基于landsat5、landsat7、landsat8三种传感器的影像,使用ENVI软件构建郑州市2000-2019年遥感生态指数RSEI。内含ENVI详细操作、使用的公式以及构建结果。

Lexicopperfield的博客 1万+

ros2 humble cartographer 2D激光雷达建图

Cartographer是一个支持多平台和传感器配置的SLAM的系统。 本文主要讲述在ros2 humble系统上cartographer的安装方法,以及如何配置参数实现自己的ros2 bag包的离线建图。

weixin_43087302的博客 6939

「Flink」Flink的状态管理与容错

在Flink中的每个函数和运算符都是有状态的。在处理过程中可以用状态来存储数据,这样可以利用状态来构建复杂操作。为了让状态容错,Flink需要设置checkpoint状态。Flink程序是通过checkpoint来保证容错,通过checkpoint机制,Flink可恢复作业的状态和计算位置。checkpoint检查点前提条件Flink的checkpoin机制需要与流和状态的持久化存储交互,一般它要求:一个持久化的数据源当Flink程序出现问题时,可以通过checkpoint持久化存储中恢复,然后从...

marcushbs的博客 309

【数电课程设计】---出租车计价器

文章目录1、任务要求2、方案3、收获 1、任务要求 2、方案 3、收获

LZY 1万+

Flink有状态计算的状态容错

假设来自 Kafka 的数据流,经过应用逻辑的计算,生成状态保存到 state 中,这个过程是源源不断的,如图所示,为了保证state的容错性,程序会周期性的保存数据消费的位置和该时刻的状态,叫做快照,如果程序有异常需要重启的时候,就会从快照中恢复。Flink 支持有状态的计算,可以把数据流的结果一直维持在内存(或 disk)中,比如累加一个点击数,如果某一时刻计算程序挂掉了,如何保证下次重启的时候,重新恢复计算的数据可以从状态中恢复,并且每条数据只被计算了一次呢?但是,您可以配置要保留的定期检查点。

sysocc的博客 646

PCL 加权局部最优投影(WLOP)简化算法

WLOP算法是一种点云重采样方法,通过迭代优化实现点云均匀化和特征保留。算法包含数据项(加权平均位置保持几何特征)和正则化项(排斥邻近点实现均匀分布)两部分。代码实现基于PCL库,通过KD树加速邻域搜索,使用高斯权重函数计算点位置更新。参数包括输出点比例、邻域半径、正则化权重和迭代次数。该算法不依赖网格信息,适合处理大规模扫描数据的预处理优化。

点云侠的博客 633

【Android 教程系列第 30 篇】为什么要为 App 应用加固 ?如何为 App 应用加固 ?

一:为什么要为 App 应用加固 ? 二:如何为 App 应用加固 ? 三:加固后为什么要重新签名 ?

“Allen Su”的博客 7054

一篇文章搞懂Flink的状态(State)与容错机制(CheckPoint)

首先的话,先来介绍一下,Flink的状态 1、首先 ,这个状态,放在内存 2、每次我接受到数据,需要计算的时候,会在拿到数据之后,先去获取存储在内存中的状态,(比如我在求和,我就会先把状态里面的结果拿出来,然后跟现在的累加) 3、拿到状态,进行运算,算完,去更新状态,然后数据继续往下走 补充: 状态不能跨任务访问,状态跟特定的算子关联 算子需要预先注册其状态 注册个Flink 一个并行度里面都有一个分区 状态 1、某个算子或者key当前的状态,因为处理的是实时数据,我们需要对这个状态进

H_hello_world的博客 3734

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

LetsonH的博客 868

flink的状态和容错

RocksDB状态量受限于本地磁盘的大小,但是rocksdb支持增量的快照,对于大量变化的缓慢状态应用来说是很好的。假设存在一个序列,序列中的元素是具有不同颜色与形状的图形,我们希望在序列里相同颜色的图形中寻找满足一定顺序模式的图形对(比如在红色的图形里,有一个长方形跟着一个三角形)。因为flink不具备跨task的通信,所以给予了广播流的读写权限,这样在所有task中都能够看到,并且要求对这些元素的处理是一致的,那么所有的task得到的broadcast sate是一致的。

a123op2346的博客 315

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大数据Hadoop之——Flink的状态管理和容错机制(checkpoint)

文章目录一、Flink中的状态1)键控状态(Keyed State)1、控件状态特点2、键控状态类型3、状态有效期 (TTL)1)过期数据的清理2)全量快照时进行清理3)增量数据清理4)在 RocksDB 压缩时清理4、键控状态的使用2)算子状态(Operatior State)1、算子状态特点2、算子状态类型3)广播状态 (Broadcast State)二、状态后端(State Backends)1)状态后端分类2)配置方式1、【第一种方式】基于代码方式进行配置2、第二种方式:基于 flink-conf

匠人精神,持之以恒! 1967

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flink 有状态计算的状态容错

状态容错 State Fault Tolerance 首先来说一说状态容错。Flink 支持有状态的计算,可以把数据流的结果一直维持在内存(或 disk)中,比如累加一个点击数,如果某一时刻计算程序挂掉了,如何保证下次重启的时候,重新恢复计算的数据可以从状态中恢复,并且每条数据只被计算了一次呢? 从数据的流入到计算流出,整个过程看成事务的话,就是如何保证整个过程具有原子性。 Flink 是怎么做...

程序员小陶的大数据分享 557

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

04. Flink的状态管理与容错机制

本文主要介绍下Flink中的状态种类,Flink的检查点机制,状态后端,端到端的一致性保证还有Flink的任务重启和恢复策略。

qq_21451945的博客 1526

Flink的状态管理和容错分享

1. **实时洞察与决策支持**:实时数据处理可实现实时监控业务关键指标,及时发现异常情况,为管理者提供实时、精准的决策依据,助力企业快速响应市场变化。2. **维护计算过程上下文**:状态保存了计算过程中的中间结果,使得系统能够在处理新数据时快速恢复计算状态,避免重复计算。1. **实时监控**:实时数据处理系统能够实时监控业务数据,及时发现数据异常和趋势变化,为决策提供实时信息支持。1. **实时洞察能力**:实时数据分析能够实时捕获数据变化,揭示业务趋势、模式和异常,为企业提供实时业务洞察。

smile6868的博客 634

通过WordCount来理解Flink的状态与容错,checkpoint如何恢复?Flink学习入门(四)

在之前的flink文章中,有计算过wordCount案例,现提出假设: 该word流在输入过程中项目挂掉了,如果重启项目还能继续无缝衔接吗?同时如何做到wordCount的单词累加呢? 这设计到2个重要的知识点: 有状态计算 checkpoint 容错 有状态计算可以说是Flink重要的特性之一 先来看代码: 在这里插入代码片 ...

后来X大数据 937

FLink学习笔记:10-Flink 的状态一致性与容错机制

文章目录一致性级别端到端(end-to-end)状态一致性Sink端实现方式幂等写入事务性(Transactional)写入不同Source和Sink的一致性保证Flink CheckpointFlink的checkpoint的生成算法图解SavepointsFlink开启checkpoint的API操作FLink的状态后端MemoryStateBackendFsStateBackendRocksDBStateBackend 一致性级别 在流处理中,一致性可以分为如下3个级别: at-most-once:

913

Flink原理与实战(java版)#第5章 Flink的状态与容错(第一节有状态流处理及第二节使用状态(一))

第一节是本章的导入章节,主要是为了引入状态的概念,该部分已经在本书第三章“有状态流处理”章节介绍了。 第二节是介绍如何使用状态,涉及的内容有KeyedDataStream的两种key的定义形式、Keyed State的有效期及两种不同的清理方式,同时也介绍了算子状态和广播状态及算子状态使用。第三节就广播状态进行了更为深入的介绍,比如广播状态的API、使用时要注意的关键点。

alanchanchn的专栏 1万+
上一篇: Flink CEP - Flink的复杂事件处理
下一篇: centos7中文编码问题
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值