Flink之state的简单理解

1.State: 即为状态,状态是计算过程中的数据信息,包括计算中间结果和元数据信息等等。状态在容错恢复,flink的增量计算等方面起着重要的地位。
在Flink中,State中主要分为Operator State以及KeyedState。每种类型的state都可以以两种形式存在
原生状态(raw state)托管状态(managed state)。推荐使用ManagedState管理状态数据

  • Operator State:是和Operator的一个特定的并行实例相绑定的,task级别的state,每个task对应一个state
  • Keyed State:是基于keyedStream上的状态,这个状态是跟特定的key绑定。keyedStream流上的每一个key,都对应一个state
  • 原生状态:由算子自己管理数据结构,当触发checkpoint操作过程中,flink并不知道数据内部的数据结构,只是将数据转换成bytes数据存储在checkpoint中,当checkpoint恢复任务时,算子自己再反序列化出状态的数据结构
  • 托管状态: 由Flink Runtime控制和管理状态数据,并将状态数据转换成为内存的Hash tables或 RocksDB的对象存储,然后将这些数据通过内部的接口持久化到checkpoints中,任务异常时可以通过这些状态数据恢复任务。

2.stateBackend: 用来保存state的存储后端。默认是存储在JobManager的内存中。当checkpoint的enabled为true时,状态将在检查点中持久化。默认情况下,flink的状态会保存在taskmanager的内存中,而checkpoint会保存在jobManager的内存中。现在可用的stateBackend分为三种类型:

  • MemoryStateBackend
  • FsStateBackend
  • RocksDBStateBackend
    (1)MemoryStateBackend: MemoryStateBackend内部将状态(state)数据作为对象保存在java堆内存中(taskManager),通过checkpoint机制,MemoryStateBackend将状态(state)进行快照并保存Jobmanager(master)的堆内存中。
    (2)FsStateBackend: 将数据保存在taskmanger的内存中,通过checkpoint机制,将状态快照写入配置好的文件系统或目录中
    (3)RocksDBStateBackend:
    RocksDBStateBackend将工作状态保存在RocksDB数据库(位置在taskManagerd的数据目录)。通过checkpoint, 整个RocksDB数据库被复制到配置的文件系统或目录中
    目前仅RocksDBStateBackend支持增量保存
    在这里插入图片描述
    (4)stateBackend的配置: 在flink的配置文件中flink-conf.yaml中设置:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远不要矫情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值