如上实现我们相识到分派Key到指定的key-group的逻辑是操作key的hashCode和maxParallelism举办取余操纵来分派的。如下图当parallelism=2,maxParallelism=10的环境下贱上key与key-group的对应相关如下图所示:

如上图key(a)的hashCode是97,与最大并发10取余后是7,被分派到了KG-7中,流上每个event城市分派到KG-0至KG-9个中一个Key-Group中。
每个Operator实譬喻何获取Key-Groups
相识了Key-Groups观念和怎样分派每个Key到指定的Key-Groups之后,我们看看怎样计较每个Operator实例所处理赏罚的Key-Groups。 在KeyGroupRangeAssignment的computeKeyGroupRangeForOperatorIndex要领描写了分派算法:
- public static KeyGroupRange computeKeyGroupRangeForOperatorIndex(
- int maxParallelism,
- int parallelism,
- int operatorIndex) {
- GroupRange splitRange = GroupRange.of(0, maxParallelism).getSplitRange(parallelism, operatorIndex);
- int startGroup = splitRange.getStartGroup();
- int endGroup = splitRange.getEndGroup();
- return new KeyGroupRange(startGroup, endGroup - 1);
- }
-
- public GroupRange getSplitRange(int numSplits, int splitIndex) {
- ...
- final int numGroupsPerSplit = getNumGroups() / numSplits;
- final int numFatSplits = getNumGroups() % numSplits;
-
- int startGroupForThisSplit;
- int endGroupForThisSplit;
- if (splitIndex < numFatSplits) {
- startGroupForThisSplit = getStartGroup() + splitIndex * (numGroupsPerSplit + 1);
- endGroupForThisSplit = startGroupForThisSplit + numGroupsPerSplit + 1;
- } else {
- startGroupForThisSplit = getStartGroup() + splitIndex * numGroupsPerSplit + numFatSplits;
- endGroupForThisSplit = startGroupForThisSplit + numGroupsPerSplit;
- }
- if (startGroupForThisSplit >= endGroupForThisSplit) {
- return GroupRange.emptyGroupRange();
- } else {
- return new GroupRange(startGroupForThisSplit, endGroupForThisSplit);
- }}
上面代码的焦点逻辑是先计较每个Operator实例至少分派的Key-Group个数,将不能整除的部门N个,均匀分给前N个实例。最终每个Operator实例打点的Key-Groups会在GroupRange中暗示,本质是一个区间值;下面我们就上图的case,声名一下怎样举办分派以及扩容后怎样从头分派。
假设上面的Stateful Operation节点的最大并行度maxParallelism的值是10,也就是我们一共有10个Key-Group,当我们并发是2的时辰和并发是3的时辰分派的环境如下图:

如上算法我们发此刻举办扩容时辰,大部门state照旧落到当地的,如Task0只有KG-4被分出去,其他的照旧保持在当地。同时我们也发明,一个job假如修改了maxParallelism的值那么会直接影响到Key-Groups的数目和key的分派,也会打乱全部的Key-Group的分派,今朝在Apache Flink体系中同一将maxParallelism的默认值调解到4096,最洪流平的停止无法扩容的环境产生。
小结 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|