Flink Program Guide (9) -- StateBackend : Fault Tolerance(Basic API Concepts -- For Java)

State Backends

本文翻译自文档Streaming Guide / Fault Tolerance / StateBackend

-----------------------------------------------------------------------------------------

使用Data Stream API编写的程序通常以多种形式维护状态:

·  窗口将收集element或在它被触发后聚合element

·  Transformation方法可能会使用key/value状态接口来存储值

·  Transformation方法也可能会实现Checkpointed接口来使其本地变量进入容错机制

相关信息请见Streaming API Guide的文档Working with State

当检查点机制启动时,上述的状态将在检查点中持久化来应对数据丢失以及恢复。而状态在内部是如何表示的、状态是如何持久化到检查点中以及持久化到哪里都取决于选定的State Backend

一、可用的State Backends

Flink自带了以下几种开箱即用的state backend:

·  MemoryStateBackend

·  FsStateBackend

·  RocksDBStateBackend

在没有配置的情况下,系统默认使用MemoryStateBackend

1.1 MemoryStateBackend

MemoryStateBackend在内部以Java堆中的对象形式持有数据。Key/Value状态和窗口Operator则持有一个hash表来存储值、trigger等。

在检查点中,该StateBackend将对状态进行快照并将该快照作为检查点接受完成消息(checkpoint acknowledgement message)发送到JobManager(Master)处,在那里它们也是存储在JobManager的Java堆中。

MemoryStateBackend的局限:

·  单个状态的大小默认地被限制到5MB,该限制值可以在MemoryStateBackend的构造函数周增加。

·  不论配置的最大状态大小是多少,状态大小无法大于akka的frame大小(见于Configuration

·  聚合的状态必须能放入JobManager的内存

MemoryStateBackend适用于以下情景:

·  本地开发以及debug时使用

·  Job只持有很小的状态时,如job只包含那些拥有某时刻数据的方法(Map,FlatMap,Filter…)。此外,Kafka Consumer也只需要很少的状态

1.2 FsStateBackend

FsStateBackend需要使用一个文件系统的URL来配置(type, address, path),如"hdfs://namenode:40010/flink/checkpoint"或者"file:///data/flink/checkpoints" 。

FsStateBackend在TaskManager的内存中持有in-flight的数据。当进行检查点时,它像状态的快照写入配置好的文件系统及目录下的文件中。而极少的元数据则存储在JobManager的内存中(或者在高可用性模式(high-availability mode)下,存储在元数据检查点中(metadata checkpoint))。

FsStateBackend适用于以下情景:

·  拥有大状态、长窗口、打key/Value状态的Job。

·  所有高可用性部署中

1.3 RocksDBStateBackend

RocksDBStateBackend使用一个文件系统URL来配置(type, address, path),例如"hdfs://namenode:40010/flink/checkpoint"或者"file:///data/flink/checkpoints" 。

RocksDBStateBackendRocksDB数据库中持有in-flight数据,该数据库默认存储在每个TaskManager的数据目录下。当进行检查点时,整个RocksDB数据库将会被检查点到配置的文件系统及目录中去。而极少的元数据则存储在JobManager的内存掣肘(或者在高可用性模式下,存储在元数据检查点中)。

RocksDBStateBackend适用于以下情景:

·  拥有非常大的状态、长窗口、大key/Value状态的Job。

·  所有高可用性部署中。

注意:要使用RocksDBStateBackend,你必须添加正确的maven dependency到你的项目中:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-statebackend-rocksdb_2.10</artifactId>
    <version>1.2-SNAPSHOT</version>
</dependency>

现在backend不在binary发行版本当中,要将它引入到集群执行中,请见文档Linking with modules not contained in the binary distribution

二、配置一个StateBackend

StateBackend可以每个job单独配置。此外,你可以定义一个默认的StateBackend,它将在Job没有定义一个StateBackend时启用。

2.1 设置单个job的StateBackend

单个job的StateBackend可以在Job的StreamExecutionEnvrionment中设置,代码如下所示:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStateBackend(new FsStateBackend("hdfs://namenode:40010/flink/checkpoints"));

2.2 设置默认StateBackend

默认StateBackend可以在flink-conf.yaml中配置,使用配置关键字state.backend

配置entry的可能的值为jobmanager(MemoryStateBackend),filesystem(FsStateBackend),或者是实现StateBackend工厂接口FsStateBackendFactory的类的完全限定类名(full
qualified class name)

在默认StateBackend设置为filesystem时,配置项state.backend.fs.checkpointdir定义了检查点数据存储的目录。

配置文件实例如下所示:

# The backend that will be used to store operator state checkpoints
state.backend: filesystem
# Directory for storing checkpoints
state.backend.fs.checkpointdir: hdfs://namenode:40010/flink/checkpoints

  

时间: 2024-10-07 06:07:07

Flink Program Guide (9) -- StateBackend : Fault Tolerance(Basic API Concepts -- For Java)的相关文章

Flink Program Guide (7) -- 容错 Fault Tolerance(DataStream API编程指导 -- For Java)

false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt

Flink Program Guide (10) -- Savepoints (DataStream API编程指导 -- For Java)

Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------------- 使用DataStream API编写的程序可以从一个savepoint处恢复执行.savepoint可以同时更新你的程序和Flink集群而不丢失任何状态.该文档包括了从触发.存储以及销毁(dispose)savepoint的所有内容.有关Flink如何处理状态和失效的详细内容,请见文

Flink Program Guide (2) -- DataStream API编程指导 -- For Java

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} 张安 张安 2 1 2016-08-02T10:56:00Z 2016-08-02T10:56:00Z 1 2945 16790 139 39 19696 16.00 false false false false

Fault Tolerance(FT)

vSphere Fault Tolerance通过创建和维护与主虚拟机相同,并且可在发生故障切换时随时替换主虚拟机的辅助虚拟机,来确保虚拟机的连续可用性,其实就是一为某一个虚拟机创建一个完全相同的副本.可以为虚拟机启用vSphere Fault Tolerance.比获得比vSphere HA所提供的级别更高的可用性和数据保护,从而确保业务连续性.Fault Tolerance时基于ESXi主机平台构建的(使用VMware vLockstep技术),它通过在单独主机上一虚拟锁步方式运行相同的虚拟

Flink Program Guide (6) -- 窗口 (DataStream API编程指导 -- For Java)

窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限的DataStream分割为有限的数据切片(slice).我们在处理无限数据流以及进行聚合element的transformation时需要此种窗口分割. 注意:我们在此文档中讨论的大多是keyed windowing,即window是应用在KeyedStream上的.关键字下的窗口具有一定的优势,

Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)

本文翻译自Pre-defined Timestamp Extractors / Watermark Emitter ------------------------------------------------------------------------------------------ 正如timestamps and watermark handling中所述,Flink提供了抽象类来让开发者赋值自己的时间戳并发送他们自己的Watermark.更具体来说,开发者需要依照不同用例情况来

Flink Program Guide (3) -- Event Time (DataStream API编程指导 -- For Java)

Event Time 本文翻译自DataStream API Docs v1.2的Event Time ------------------------------------------------------- 一.事件时间 / 处理时间 / 提取时间 Flink支持流程序不同的time概念. ·        Processing time:处理时间指执行对应Operation的设备的系统时间. 当一个流程序以处理时间运行,所有基于时间的operation(如time窗口)将使用运行对应O

2020最新新浪短网址API接口分享(附腾讯url.cn短网址API接口)

微信营销中,原链接太长总是很不方便分享,转化率极低.所以我们一般使用微信短链接即url.cn的短网址或者新浪微博(t.cn)短网址样式来缩短我们的链接,再发布到微信平台进行链接分享,今天给大家分享一个微信短链接生成接口,以及微信url.cn短网址新浪t.cn短网址的生成方式.   新浪t.cn短网址api接口: http://qingmeidwz.cn/shorten.php?url_long=http://www.baidu.com 微信url.cn短网址生成api接口: http://qin

Apache Flink fault tolerance源码剖析(一)

因某些童鞋的建议,从这篇文章开始结合源码谈谈Flink Fault Tolerance相关的话题.上篇官方介绍的翻译是理解这个话题的前提,所以如果你想更深入得了解Flink Fault Tolerance的机制,推荐先读一下前篇文章理解它的实现原理.当然原理归原理,原理体现在代码实现里并不是想象中的那么直观.这里的源码剖析也是我学习以及理解的过程. 作为源码解析Flink Fault Tolerance的首篇文章,我们先暂且不谈太有深度的东西,先来了解一下:Flink哪里涉及到检查点/快照机制来