209.Flink(四):状态,按键分区,算子状态,状态后端。容错机制,检查点,保存点。状态一致性。flink与kafka整合

一、状态

1.概述

算子任务可以分为有状态、无状态两种。

  • 无状态:filter,map这种,每次都是独立事件
  • 有状态:sum这种,每次处理数据需要额外一个状态值来辅助。这个额外的值就叫“状态”

2.状态的分类

(1)托管状态(Managed State)和原始状态(Raw State)

托管状态就是由Flink统一管理的,状态的存储访问、故障恢复和重组等一系列问题都由Flink实现,我们只要调接口就可以。

原始状态则是自定义的,相当于就是开辟了一块内存,需要我们自己管理,实现状态的序列化和故障恢复。

(2)算子状态(Operator State)和按键分区状态(Keyed State)

按键分区状态其实就是被keyBy的算子。

使用Keyed State必须基于KeyedStream。没有进行keyBy分区的DataStream,即使转换算子实现了对应的富函数类,也不能通过运行时上下文访问Keyed State。富函数可以获取运行时上下文。

所有算子都是在本地实例上维护的,并行子任务的状态不共享。

3.按键分区状态

(1)值状态(ValueState)

状态中只保存一个“值”(value)

你可能感兴趣的:(从头开始学编程,flink,大数据)