Apache flink 为什么用这种方法计算Flink的键的状态位置?

Apache flink 为什么用这种方法计算Flink的键的状态位置?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在阅读Flink源代码,了解如何计算键在数组中的状态位置,并找到由keyGroupIndex keyGroupOffset计算的状态位置, 我的问题是: 为什么使用keyGroupIndex keyGroupOffset作为位置,为什么不直接使用状态[keyGroupIndex]呢 此外,我还发现了语句Map[]state=(Map[])new-Map[keyContext.getNumberOfKeyGroups()]为状态数组分配了键组的大小编号,如果直接使用状态[keyGroupInd

我正在阅读Flink源代码,了解如何计算键在数组中的状态位置,并找到由keyGroupIndex keyGroupOffset计算的状态位置,
我的问题是:

  • 为什么使用keyGroupIndex keyGroupOffset作为位置,为什么不直接使用状态[keyGroupIndex]呢

    此外,我还发现了语句
    Map[]state=(Map[])new-Map[keyContext.getNumberOfKeyGroups()]为状态数组分配了键组的大小编号
    ,如果直接使用
    状态[keyGroupIndex]
    ,它也应该是一对一映射

  • 为什么我们需要KeyGroupRange

  • 下面是从源代码nestedMapStateTable.java中提取的代码

    this.keyGroupOffset=keyContext.getKeyGroupRange().getStartKeyGroup();
    @可视性测试
    Map getMapForKeyGroup(int-keyGroupIndex){
    最终int pos=索引偏移量(keyGroupIndex);
    如果(位置>=0&&pos

    其思想是,每个
    statebend
    负责完整密钥组范围的子集。因此,我们只需要为范围内的每个关键组存储一个状态映射。为了进行状态映射管理,我们规范化了关键组索引,使其以
    0
    开头


    但是,代码中有一个小错误,它为完整范围内的每个键组分配一个状态映射条目。这应该是固定的。这是相应的。

    谢谢您的帮助。