Currently, the only type of the snapshots in keyed streams is KeyGroupsStateHandle which is full and store the states one group after another. With the introduction of incremental checkpointing, we need a higher level abstraction of keyed snapshots to allow flexible snapshot formats.
The implementation of KeyedStateHandle s may vary a lot in different backends. The only information needed in KeyedStateHandle s is their key group range. When recovering the job with a different degree of parallelism, KeyedStateHandle s will be assigned to those subtasks whose key group ranges overlap with their ranges.