State Backends

原文链接


使用Data Stream API编写的程序通常以不同的形式持有状态:

  • 在窗口中收集或聚合元素,直到触发状态存储
  • 转换函数可能使用key/value状态接口来存储元素
  • 转换函数可能实现CheckpointedFunction接口来使得它们的本地变量容错。

参见流API指南中的状态部分

当checkpoint被激活时,状态会被持久化到checkpoint,以防止数据丢失和无缝恢复。状态在内部如何组织和它们如何以及在哪持久化,依赖于所选的状态后端

可选的状态后端

Flink内部提供了这些状态后端:

  • MemoryStateBackend
  • FsStateBackend
  • RocksDBStateBackend

如果没有其他配置,系统将使用MemoryStateBackend。

MemoryStateBackend

MemoryStateBackend将内部的数据保存在Java堆上。 Key/value状态和窗口操作符持有存储值,触发器等的哈希表。
当进行checkpoint时,这个状态后端会对当前的状态进行快照,并且将其作为checkpoint ACK消息的一部分发送给JobManager(master),该JobManager将其存储在它的堆上。
MemoryStateBackend可以配置使用异步快照的方式。虽然我们强烈鼓励使用异步快照的方式来避免管道阻塞,但是请注意,这个是一个新特性,目前默认情况下不启用。为了启用这个状态,用户可以在初始化 MemoryStateBackend 时将构造函数中相应的布尔标识设为 true,例如:

    new MemoryStateBackend(MAX_MEM_STATE_SIZE, true);

MemoryStateBackend的局限性:

  • 单个状态的大小默认情况下最大为5MB。这个值可以通过MemoryStateBackend构造函数进行增加。
  • 无论配置的最大状态大小为多少,状态的大小不能超过akka帧大小(见Configuration)
  • 聚合的状态必须在JobManager的内存中能存放

MemoryStateBackend适用于:

  • 本地开发和调试
  • 只有很小状态的作业,例如作业只由record-at-a-time函数组成(Map,FlatMap,Filter,...)。Kafka消费者只需要非常小的状态。

FsStateBackend

FsStateBackend使用文件系统URL(类型,地址,路径),例如“hdfs://namenode:40010/flink/checkpoints” 或 “file:///data/flink/checkpoints”.

FsStateBackend将in-flight数据存放在TaskManager的内存中。当进行checkpoint时,它将状态快照写入到配置的文件系统和目录。最小的元数据存储在JobManager的内存中(或者,在高可用模式下,在元数据checkpoint中)。

FsStateBackend默认使用异步快照以避免在写状态checkpoint时阻塞处理管道。要禁用此特性,用户可以初始化 MemoryStateBackend 时将构造函数中相应的布尔标识设为 false,例如:

    new FsStateBackend(path, false);

FsStateBackend适用于:

  • 具有大状态,长窗口,大key/value状态的作业
  • 所有的高可用性设置

RocksDBStateBackend

RocksDBStateBackend 使用文件系统URL(类型,地址,路径),例如“hdfs://namenode:40010/flink/checkpoints” 或 “file:///data/flink/checkpoints”.

RocksDBStateBackend将in-flight数据存储在RocksDB数据库中,它(默认)存储在TaskManager的data目录下。当checkpoint时,整个RocksDB数据库将被checkpoint到配置的文件系统和目录下。最小的元数据存储在JobManager的内存中(或者,在高可用模式下,在元数据checkpoint中)。

RocksDBStateBackend总是执行异步快照。

RocksDBStateBackend的限制:

  • 作为RocksDB的JNI桥接API是基于byte[]的,每个key和value的最大的支持大小是 2^31字节。重要:在RocksDB中使用合并操作的状态(例如,ListState)能够默默的积累到值的size大于 2^31字节,并且在下次检索时会失败。这是目前 RocksDB JNI的限制。

RocksDBStateBackend适用于:

  • 具有大状态,长窗口,大key/value状态的作业
  • 所有的高可用性设置

注意:你可以保持的状态的数量只受限于磁盘可用空间的大小。相比于将状态保存到内存的FsStateBackend,这允许保持非常大的状态。然而,这也意味着,可以达到的最大的吞吐量会比状态后端的吞吐量要低。

RocksDBStateBackend是目前唯一提供增量checkpoint的状态后端(请参阅此处) 。

配置状态后端

如果您不做任何指定,默认的状态后端是JobManager。如果你希望为你的集群中的所有作业创建一个非默认的状态后端,你可以通过在flink-conf.yaml中指定一个新的默认后端。默认的状态后端可以在每个作业的基础上进行覆盖,如下所示.

设置一个作业级的状态后端

作业的状态后端通过作业中的 StreamExecutionEnvironment进行设置,如下述示例所示:

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

设置默认状态后端

默认状态后端可以通过在 flink-conf.yaml 中设置state.backend值指定。

可能的配置项是jobmanager (MemoryStateBackend), filesystem (FsStateBackend), rocksdb (RocksDBStateBackend),或者实现了状态后端工厂FsStateBackendFactory的类的完全限定类名,例如,为RocksDBStateBackend设置为org.apache.flink.contrib.streaming.state.RocksDBStateBackendFactory

配置文件中的示例部分如下所示:

# 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 原文链接 Flink提供了指定状态存储方式和位置的不同的状态后端。 状态可以位于Java的堆内或堆外。根据你的状态...
    小C菜鸟阅读 159评论 0 0
  • 全世界最红的猫 2016-04-28FOD工具控FOD工具控 全世界最红的猫 认得这只总是一脸一副欠它一千两百万、...
    FOD生活升级阅读 654评论 0 0
  • 永靖县公安局交警大队10月28日工作开展情况:大队全天出动警力40人,出动警车4辆,查处各类交通违法行为180起,...
    孔得锐阅读 237评论 0 0
  • 立秋是个好时间, 温热的天气, 转眼让雨呈现, 暴雨肆虐, 让凉意撒入心田, 满满的期待, 满满的眷恋, 一场秋雨...
    橘子洲的鱼阅读 192评论 0 2
  • 这个城市总是在雨中,不是在下雨,就是在准备下雨。也许,故事中的烟雨江南就这样而来的吧。小志想,烟或许散了吧,这个季...
    Iase小文阅读 326评论 0 3