0
我讀了如何計算陣列爲重點的狀態位置弗林克的源代碼,並發現keyGroupIndex-keyGroupOffset計算的狀態位置,
我的問題是:爲什麼通過這種方式爲Flink計算的Key的狀態位置?
爲什麼要使用keyGroupIndex-keyGroupOffset作爲位置,爲什麼不直接使用狀態[keyGroupIndex]?
此外,如果直接使用
state[keyGroupIndex]
,我還發現狀態數組的大小由Number of KeyGroup指定,如果直接使用state[keyGroupIndex]
,它也應該是一對一的映射。爲什麼我們需要KeyGroupRange?
下面代碼從源代碼NestedMapsStateTable.java
this.keyGroupOffset = keyContext.getKeyGroupRange().getStartKeyGroup();
@VisibleForTesting
Map<N, Map<K, S>> getMapForKeyGroup(int keyGroupIndex) {
final int pos = indexToOffset(keyGroupIndex);
if (pos >= 0 && pos < state.length) {
return state[pos];
} else {
return null;
}
}
private int indexToOffset(int index) {
return index - keyGroupOffset;
}
public NestedMapsStateTable(InternalKeyContext<K> keyContext, RegisteredKeyedBackendStateMetaInfo<N, S> metaInfo) {
super(keyContext, metaInfo);
this.keyGroupOffset = keyContext.getKeyGroupRange().getStartKeyGroup();
@SuppressWarnings("unchecked")
Map<N, Map<K, S>>[] state = (Map<N, Map<K, S>>[]) new Map[keyContext.getNumberOfKeyGroups()];
this.state = state;
}
謝謝你的幫助直到。 –