Как получить распределение слотов в KeyedStream

avatar
Shigure
9 августа 2021 в 01:55
71
1
0

я использую flink версии 1.13.0.

по какой-то причине мне нужно отслеживать журнал указанного ключа в диспетчере задач, но я не знаю, какому диспетчеру задач будет назначен этот ключ.

поэтому я хочу знать, какой слот будет назначен при использовании функции keyBy, есть ли какой-то алгоритм разделения, с помощью которого я могу вычислить идентификатор слота по ключу?

Источник

Ответы (1)

avatar
David Anderson
9 августа 2021 в 12:35
1

Это происходит в несколько шагов. Клавиши сопоставляются с группами клавиш, а группы клавиш назначаются слотам. Вы найдете весь соответствующий код в org.apache.flink.runtime.state.KeyGroupRangeAssignment. Начать здесь:

/**
  * Assigns the given key to a parallel operator index.
  *
  * @param key the key to assign
  * @param maxParallelism the maximum supported parallelism, aka the number of key-groups.
  * @param parallelism the current parallelism of the operator
  * @return the index of the parallel operator to which the given key should be routed.
  */

public static int assignKeyToParallelOperator(Object key, int maxParallelism, int parallelism) {
    Preconditions.checkNotNull(key, "Assigned key must not be null!");
    return computeOperatorIndexForKeyGroup(
            maxParallelism, parallelism, assignToKeyGroup(key, maxParallelism));
}