image.png

State 种类

Operator State 一个 Operator对一个一个 state

Keyed State

image.png

  1. 是否存在当前处理的 key(current key):operator state 是没有当前 key 的概念,而 keyed
    state 的数值总是与一个 current key 对应。
  2. 存储对象是否 on heap: 目前 operator state backend 仅有一种 on-heap 的实现;而 keyed state
    backend 有 on-heap 和 off-heap(RocksDB)的多种实现。
  3. 是否需要手动声明快照(snapshot)和恢复 (restore) 方法:operator state 需要手动实现
    snapshot 和 restore 方法;而 keyed state 则由 backend 自行实现,对用户透明。
  4. 数据大小:一般而言,我们认为 operator state 的数据规模是比较小的;认为 keyed state 规模是
    相对比较大的。需要注意的是,这是一个经验判断,不是一个绝对的判断区分标准。

State 的内部存储

image.png


KeyedState动态缩放

image.png

  • Flink中的key是按照hash(key) % parallelism的规则分配到各个Sub-Task上去
  • 如何决定一个key该分配到哪个Key Group中
    • 对key进行两重哈希(一次取hashCode,一次做MurmurHash)之后,再对最大并行度取余,得到Key Group的索引
  • 如何决定一个Sub-Task该处理哪些Key Group(即对应的KeyGroupRange)
    • 由并行度、最大并行度和算子实例(即Sub-Task)的ID共同决定

image.png


State Backend 选择

image.png


RocksDB

RocksDB 的 State存储

image.png


StateTtlConfig

image.png


优化

RocksDB 优化相关参数

image.pngimage.pngimage.png


相关PDF
State best practice.pdf