1.概述
首先说说我对flink key state 多年的误解。以前我一直以为key State是类似这样的

假设数据如上,我原先以为当数据经过key的时候,流经下游的时候,数据是在下游根据key分组,如果key不存在,那么就增加一个key,如果存在,那么就放到一起,然后计算存储一个state,因此key state 每个不同的key之间是隔离的。
我这里错误的理解每个key在每个算子的每个并行度的task上,都会有一份或者平分,key1在并行度1上,key2在并行度2上。
这里这样理解有错误的,可以参考文章:【Flink】Flink Key State 和 Operator State 区别
或者参考视频:
本文探讨了对Flink Keyed State的误解,指出Keyed State并非每个并行度上都有完整的Key副本,而是基于Key Group进行分布。内容详细解释了Key Group的分配原则和过期清理策略,并提出疑问:一个KeyState代表一个Key还是一个KeyGroup?测试结果显示,`getRuntimeContext().getState()`返回的是状态句柄,每个并行度一个,用于访问Sub-Task分配到的KeyGroups中所有Keys的状态值。
订阅专栏 解锁全文
279

被折叠的 条评论
为什么被折叠?



