新版 Flink状态State管理实战和Checkpoint讲解——第十一课(未完待续)

DBC 1.6K 0

 

一、Flink的状态State介绍和应用场景解析

  • 什么是State状态
      • 数据流处理离不开状态管理,比如窗口聚合统计、去重、排序等
      • 是一个Operator的运行的状态/历史值,是维护在内存中
      • 流程:一个算子的子任务接收输入流,获取对应的状态,计算新的结果,然后把结果更新到状态里面

    新版 Flink状态State管理实战和Checkpoint讲解——第十一课(未完待续)插图

  • 有状态和无状态介绍
    • 无状态计算: 同个数据进到算子里面多少次,都是一样的输出,比如 filter
    • 有状态计算:需要考虑历史状态,同个输入会有不同的输出,比如sum、reduce聚合操作

 

  • 状态管理分类
    • ManagedState(用的多)
      • Flink管理,自动存储恢复
      • 细分两类
        • Keyed State 键控状态(用的多)
          • 有KeyBy才用这个,仅限用在KeyStream中,每个key都有state ,是基于KeyedStream上的状态
          • 一般是用richFlatFunction,或者其他richfunction里面,在open()声明周期里面进行初始化
          • ValueState、ListState、MapState等数据结构
        • Operator State 算子状态(用的少,部分source会用)
          • ListState、UnionListState、BroadcastState等数据结构
    • RawState(用的少)
      • 用户自己管理和维护
      • 存储结构:二进制数组

 

  • State数据结构(状态值可能存在内存、磁盘、DB或者其他分布式存储中)
    • ValueState 简单的存储一个值(ThreadLocal / String)
      • ValueState.value()
      • ValueState.update(T value)
    • ListState 列表
      • ListState.add(T value)
      • ListState.get() //得到一个Iterator
    • MapState 映射类型
      • MapState.get(key)
      • MapState.put(key, value)

发表评论 取消回复
表情 图片 链接 代码

分享