算子任务可以分为有状态、无状态两种。
托管状态就是由Flink统一管理的,状态的存储访问、故障恢复和重组等一系列问题都由Flink实现,我们只要调接口就可以。
原始状态则是自定义的,相当于就是开辟了一块内存,需要我们自己管理,实现状态的序列化和故障恢复。
按键分区状态其实就是被keyBy的算子。
使用Keyed State必须基于KeyedStream。没有进行keyBy分区的DataStream,即使转换算子实现了对应的富函数类,也不能通过运行时上下文访问Keyed State。富函数可以获取运行时上下文。
所有算子都是在本地实例上维护的,并行子任务的状态不共享。
状态中只保存一个“值”(value)