这篇文章我们将深入探讨有状态流处理,更确切地说是 Flink 中可用的不同状态后端。在以下部分,我们将介绍 Flink 的3个状态后端,它们的局限性以及根据具体案例需求选择最合适的状态后端。...在有状态的流处理中,当开发人员启用了 Flink 中的检查点功能时,状态会持久化存储以防止数据的丢失并确保发生故障时能够完全恢复。为应用程序选择何种状态后端,取决于状态持久化的方式和位置。...Flink 提供了三种可用的状态后端:MemoryStateBackend,FsStateBackend,和RocksDBStateBackend。 ? 1....MemoryStateBackend MemoryStateBackend 是将状态维护在 Java 堆上的一个内部状态后端。键值状态和窗口算子使用哈希表来存储数据值和定时器。...与上面提到的堆上后端相比,这可能会影响应用程序的吞吐量。 不同的状态后端可以满足不同开发人员的需求,在开始开发应用程序之前应该仔细考虑和规划后选择。
RocksDb大状态优化 截至当前,Flink 作业的状态后端仍然只有 Memory、FileSystem 和 RocksDB 三种可选,且 RocksDB 是 状态数据量较大(GB 到 TB 级别)...如果仅考虑 Flink 状态存储这一方面,我们仍然可以总结出一些相对普适的优化思路。本文先介绍一些基础知识,再列举方法。...,越大越精确 state.backend.latency-track.state-name-as-variable:true:将状态名作为变量 0代表是任务编号,filter.visit-state是定义的状态的变量名...开启增量CheckPoint和本地恢复 开启增量CheckPoint RocksDB是目前唯一可用于支持有状态流处理应用程序增量检查点的状态后端,可以修改参数开启增量CheckPoint: state.backend.incremental...本地恢复目前仅涵盖键值类型的状态后端(RocksDB)。
图片 Managed State和Raw State Flink有两种基本类型的状态:托管状态(Managed State)和原生状态(Raw State)。...Keyed State Flink 为每个键值维护一个状态实例,并将具有相同键的所有数据,都分区到同一个算子任务中,这个任务会维护和处理这个key 对应的状态。...图片 Flink 为算子状态提供三种基本数据结构: 列表状态( List state ):状态是一个 可序列化 对象的集合 List,彼此独立,方便在改变并发后进行状态的重新分派。...广播状态( Broadcast state ):如果一个算子有多项任务,而它的每项任务状态又都相同,那么这种特殊情况最适合应用广播状态。 状态后端和checkpoint 状态后端是保存到本地的状态。...table.exec.state.ttl 状态后端ttl时间,一般用于join场景下,防止状态后端过大导致作业失败 checkpoint 相关配置
Managed State和Raw State Flink有两种基本类型的状态:托管状态(Managed State)和原生状态(Raw State)。...Keyed State Flink 为每个键值维护一个状态实例,并将具有相同键的所有数据,都分区到同一个算子任务中,这个任务会维护和处理这个key 对应的状态。...Flink 为算子状态提供三种基本数据结构: 列表状态( List state ):状态是一个 可序列化 对象的集合 List,彼此独立,方便在改变并发后进行状态的重新分派。...状态后端和checkpoint 状态后端是保存到本地的状态。 checkpoint是将状态定时备份到第三方存储,比如hdfs,obs上面,方便在作业重新运行的时候恢复数据。...去除掉已经过期的状态后端剩余的如下所示: HashMapStateBackend 在TaskManager的内存当中保存作业的状态后端信息,如果一个TaskManager并行执行多个任务时,所有的聚合信息都要保存到当前的
在本节中,您将了解Flink为编写有状态程序提供的api。请参阅有状态流处理以了解有状态流处理背后的概念。...Flink的数据模型不是基于键值对的。因此,不需要将数据集类型物理地打包到键和值中。键是“虚拟的”:它们被定义为实际数据之上的函数,以指导分组操作符。...增量数据清理 # 另外可以选择增量式清理状态数据,在状态访问或/和处理时进行。如果某个状态开启了该清理策略,则会在存储后端保留一个所有状态的惰性全局迭代器。...RocksDB 会周期性的对数据进行合并压缩从而减少存储空间。 Flink 提供的 RocksDB 压缩过滤器会在压缩时过滤掉已经过期的状态数据。...对于元素序列化后长度不固定的列表状态,TTL 过滤器需要在每次 JNI 调用过程中,额外调用 Flink 的 java 序列化器, 从而确定下一个未过期数据的位置。
Hi~朋友,关注置顶防止错过消息 什么是有状态的计算 使用状态的场景 为什么需要状态管理 理想状态管理的特点 Flink状态分类 Managed State分类 Keyed Stated特点 Operator...State特点 Keyed Stated的具体分类 如何保存状态 Checkpoint和Savepoint区别 状态保存在哪里 什么是有状态的计算?...理想状态管理的特点 易用:需要提供丰富的数据结构、多样的状态组织形式以及简洁的扩展接口 高效:实时作业需要需要更低的延迟,因此在状态保存和恢复时,需要保证处理速度;同时在进行横向扩展时不能影响作业本身的处理性能...可靠:状态需要可以被持久化,保证宕机后可以恢复 Flink状态分类 Managed State RawState 状态管理方式 Flink Runtime自动管理:自动存储、自动恢复、内存优化 用户自己管理...如果从Checkpoint进行恢复,需要保证数据源支持重发,同时Flink提供了两种一致性语义(恰好一次或者至少一次)。
一、状态分类 相对于其他流计算框架,Flink 一个比较重要的特性就是其支持有状态计算。...,即假设算子的并行度是 2,那么其应有两个对应的算子状态: 2.2 键控状态 键控状态 (Keyed State) :是一种特殊的算子状态,即状态是根据 key 值进行区分的,Flink 会为每类键值维护一个状态实例...:savepoints 四、状态后端 4.1 状态管理器分类 默认情况下,所有的状态都存储在 JVM 的堆内存中,在状态数据过多的情况下,这种方式很有可能导致内存溢出,因此 Flink 该提供了其它方式来存储状态数据...,这些存储方式统一称为状态后端 (或状态管理器): 主要有以下三种: 1....4.2 配置方式 Flink 支持使用两种方式来配置后端管理器: 第一种方式:基于代码方式进行配置,只对当前作业生效: // 配置 FsStateBackend env.setStateBackend(
概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一 Flink优势: 支持高吞吐、低延迟、高性能 支持事件时间Event_time概念 支持有状态计算 有状态计算是指: 在程序计算过程中...(如下图所示) 无状态计算实现的复杂度相对较低,实现起来较容易,但是无法完成提到的比较复杂的业务场景: CEP(复杂事件处理):获取符合某一特定事件规则的事件,状态计算就可以将接入的事件进行存储,然后等待符合规则的事件触发...Flink状态编程 支持的状态类型 Flink根据数据集是否根据Key进行分区,将状态分为Keyed State和 Operator State(Non-keyed State) 两种类型。...另外一种是原生状态(Raw State)形式,由算子自己管理数据结构,当触发Checkpoint过程中,Flink并不知道状态数据内部的数据结构,只是将数据转换成bytes数据存储在Checkpoints...在Flink中推荐用户使用Managed State管理状态数据,主要原因是Managed State能够更好地支持状态数据的重平衡以及更加完善的内存管理。
Managed State表示数据结构由Flink runtime控制,例如内部哈希表或者RocksDB。例如,“ValueState”,“ListState”等等。...小提示: 状态后端(statebackend)会给用户的每个value存储一个时间戳,这就意味着会增加存储成本。...堆状态后端(heap state backend)会在内存里存储一个额外的java对象(该对象带有指向用户状态对象的引用)和一个原始long值。...RocksDB状态后端会为每个存储的值(list entry或者map entry)增加8byte。 当前TTL仅仅支持处理时间。...,也即是状态后端不能是RocksDB。
所以在对监控的设计上Flink也是下了一定功夫的,在其官网也是有非常多的介绍。...Flink Metric内置的监控涵盖面丰富,支持: 1 系统级别的监控:CPU状态信息、内存状态信息等(默认关闭,需要更改配置文件打开,且lib目录下需要添加相关依赖jar包) 2 JVM级别的监控:...上图是Flink的支持的2中监控数据收集方式:Fetch和Report。...Flink 中,客户端向 Flink 集群发起 REST 请求均是通过 WebMonitorEndpoint 来处理的。...Report方式: 同时Flink也提供了往外Report监控指标的方式,及常见的通过在flink-conf.yaml配置Metric Reporter将flink的监控指标定期发送至第三方系统。
摘要本文将从状态的概念入手,详细介绍 Flink 中的状态分类、状态的使用、持久化及状态后端的配置。...一、Flink状态概念 Flink的处理机制核心:有状态的流式计算,那么什么是有状态,什么是无状态呢?...,分配在不同的任务槽(task slot)中运行,而这些slot的计算资源是物理隔离的, 所以flink管理的的状态是在不同的并行子任务是无法共享的,基于这个想法我们可以将状态分为 算子状态和按键状态...比如 Flink 的 Kafka 连接器中,就用到了算子状态。...上一次温度" lastTemperatureValueState.update(curTemp); } } } 五、状态后端 1、MemoryStateBackend 内存级的状态后端,会将键控状态作为内存中的对象进行管理
Flink 1.6 版本 很多有状态流应用程序的常见需求是能够控制应用程序状态的访问时长以及何时删除它。这篇文章介绍了在 1.6.0 版本添加到 Flink 的状态生命周期时间(TTL)功能。...Flink有状态流处理 任何实时流应用程序都会包含有状态操作。Flink 为容错状态流处理提供了许多强大的功能。...用户可以选择维护状态的不同状态原语(原子值,列表,映射)和状态后端(堆内存,RocksDB)。处理函数中的应用程序逻辑可以访问和修改状态。...垃圾回收 当一个状态在读操作中被访问时,Flink 会检查它的时间戳,如果过期则清除状态(取决于配置的状态可见性,是否返回过期状态)。...但是,用户不需要自己实现清理逻辑,状态会自动为他们清理。更复杂的想法取决于所选的状态后端: 堆内存状态后端中的增量部分清理在状态访问或记录处理时触发。
概述 Flink 提供了不同的状态终端,可以指定状态的存储方式和位置。 状态可以存储在Java的堆内或堆外。...根据你的状态终端,Flink 也可以管理应用程序的状态,这意味着 Flink 可以处理内存管理(可能会溢出到磁盘,如果有必要),以允许应用程序存储非常大的状态。...默认情况下,配置文件 flink-conf.yaml 为所有Flink作业决定其状态终端。 但是,默认的状态终端配置也可以被每个作业的配置覆盖,如下所示。...2.1 MemoryStateBackend MemoryStateBackend 将数据以对象的形式保存在 Java 堆上。键值对状态和窗口算子拥有保存值,触发器等的哈希表。...如果你希望为集群中的所有作业建立不同的默认值,可以在 flink-conf.yaml 中定义一个新的默认状态终端来完成。默认的状态终端可以被每个作业的配置覆盖,如下所示。
所以,Flink 在框架层面提供了状态的 Api,业务如果需要使用状态,直接使用框架提供的状态 api 来存储状态即可,至于如何存储的细节对于开发者来说是透明的,开发者专注自己的业务即可。...二、状态和容错的关系 Flink 在框架层面提供了算子状态(Operator State)和键控状态(Keyed State)。 算子状态是绑定在算子上的,而键控状态是绑定在某个key上的。...其实 Api 的使用倒是其次,看看就会,重点是要体会背后的设计思想。 Flink 设计状态的目的是? 以更高效的方式管理状态 在状态基础之上做容错 更高效的方法体现在哪里,容错体现在哪里?...Flink 设计了不同的状态后端来承载不同体量的状态。...在新版本中,只有两种状态后端,HashMapStateBackend 和 EmbeddedRocksDBStateBackend,分别适用于大体量和超大体量的状态存储。
Flink 需要了解状态,以便使用检查点进行状态容错,并允许流应用程序使用保存点。 对状态进行了解有助于你对 Flink 应用程序进行扩展,这意味着 Flink 负责在并行实例之间进行重新分配状态。...Flink 的可查询状态queryable state功能允许你在 Flink 运行时在外部访问状态。 在使用状态时,阅读有关Flink的 State Backends 应该对你很有帮助。...Flink 提供不同的 State Backends,并指定状态的存储方式和位置。状态可以位于Java的堆内或堆外。...根据你的 State Backends,Flink也可以管理应用程序的状态,这意味着Flink进行内存管理(可能会溢写到磁盘,如果有必要),以允许应用程序保持非常大的状态。...State Backends可以在不更改应用程序逻辑的情况下进行配置。 下一步 使用状态:显示如何在Flink应用程序中使用状态,并解释不同类型的状态。 检查点:描述如何启用和配置容错检查点。
在其他特性中,它提供了高度可定制的窗口逻辑,不同表现特征下的不同状态原语,注册和响应定时器的钩子,以及高效的异步请求外部系统的工具。...Flink 的关系API:Table API 和SQL 从1.1.0版本(2016年8月发布)以来,Flink 提供了两个语义相当的关系API,语言内嵌的Table API(用于Java 和Scala)...动态表的持续查询 支持查询更新之前产生的结果是Flink 的关系API 的下一个重要步骤。这个功能非常重要,因为它大大增加了API 支持的用例的范围和种类。...3.4 切换到动态表发生的改变 在1.2版本中,Flink 关系API 的所有流操作,例如过滤和分组窗口聚合,只会产生新行,并且不能更新先前发布的结果。 相比之下,动态表能够处理更新和删除修改。...因此,当前模型的语义被新的动态表模型完全覆盖和保留。 4. 结论与展望 Flink 的关系API 在任何时候都非常适合用于流分析应用,并在不同的生产环境中使用。
InternalKVState 提供了只对 Flink 引擎暴露的接口比如 namespace set/get、val get、namespace merging,这些接口并不稳定,Flink 引擎希望对上层应用屏蔽...ValueState:即类型为T的单值状态。这个状态与对应的key绑定,是最简单的状态了。它可以通过update方法更新状态值,通过value()方法获取状态值。...ReducingState:这种状态通过用户传入的reduceFunction,每次调用add方法添加值的时候,会调用reduceFunction,最后合并到一个单一的状态值。...FoldingState:跟ReducingState有点类似,不过它的状态值类型可以与add方法中传入的元素类型不同(这种状态将会在Flink未来版本中被删除)。...在对应的statebackend中,会去调用对应的create方法获取到stateDescriptor中的值。Flink通过StateDescriptor来定义一个状态。
有关状态的知识还允许重新缩放 Flink 应用程序,这意味着 Flink 负责在并行实例之间重新分配状态。 可查询状态允许您在运行时从 Flink 外部访问状态。...在使用状态时,阅读 Flink 的状态后端可能也很有用。 Flink 提供了不同的状态后端来指定状态的存储方式和位置。 Keyed State Keyed State存储在键值存储后端的。...除此之外,它执行与对齐检查点恢复期间相同的步骤。 状态后端 存储键/值索引的确切数据结构取决于所选的状态后端。...一个状态后端将数据存储在内存中的哈希映射中,另一个状态后端使用 RocksDB 作为键/值存储。...除了定义保存状态的数据结构外,状态后端还实现了获取键/值状态的时间点快照并将该快照存储为检查点的一部分的逻辑。 可以在不更改应用程序逻辑的情况下配置状态后端。
/06/26/broadcast-state.html 自版本 Flink 1.5.0 以来,Apache Flink 提供了一种新的状态类型,称为广播状态(Broadcast State)。...Apache Flink 中的广播状态来完成相应工作。...接下来,我们将展示如何使用 Flink 的 DataStream API 和广播状态功能实现该实例的程序代码。 让我们从程序的输入数据开始。...类与其它任何 ProcessFunction 类一样,完全可以调用 Flink 的状态和时间功能,因此可以用于实现复杂的程序逻辑。...结论 在本文中,我们通过学习一个应用程序的实例,来解释 Apache Flink 的广播状态是什么,以及如何应用它来评估事件流上的动态模式,除此之外本文还讨论了广播状态的 API,并展示了相关源代码。
表空间状态-READ ONLY、READ WRITE 1. 只读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的需要。...一个像SELECT COUNT(*)这样简单的查询,就可以确保在表空间的数据块在接下来的访问中获得最佳的效率。因为这种做法就不需要数据库检查最近经常修改数据块的交易状态。 7....只要表空间一直处于只读状态,那就不需要再次地备份,因为不会有对表空间的更新。 10. 使用LATER TABLESPACE ......表空间置为read/write的前提条件还需要表空间中的所有数据文件以及表空间自身都处于online状态。可以使用ALTER DATABASE ... DATAFILE ......(2) 将表空间置为read-only只读模式。 (3) 使用操作系统命令将表空间的数据文件复制到WORM设备。 (4) 将表空间置为offline状态。
领取专属 10元无门槛券
手把手带您无忧上云