Как работает Apache Flink оператор и состояние ключа с параллельными экземплярами? - PullRequest
0 голосов
/ 26 мая 2018

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

Вот простой пример:

class MultiplyNumber implements FlatMapFunction<Integer, Integer> {

     // This is the operator state (this is statically defined for simplicity here in this example, but assume this can dynamic based on control stream)
     List<Integer> multipliers = Arrays.asList(2,3,4,5);

     void flatMap(Integer value, Collector<Integer> out){
           for(Integer multiplier: multipliers){
                  out.collect(mutiplier*value);
           }
     }
}

Предположим, что мы работаем с параллелизмом =2, что означает, что у нас есть 2 экземпляра параллельных операторов (MultiplyNumber) (Operator1 и Operator2)

Если состояние оператора (т. Е. Список множителей) распределено между этими экземплярами, то скажите: Operator1 имеет 2,3 как множителии Operator2 имеет множители 4,5.

Теперь предположим, что у нас есть целочисленные потоки с ключами, поступающие в качестве входных данных.Ключом для всех четных чисел является «Четное», а для всех нечетных чисел - «Нечетное».

Flink отправит все четные числа в Operator1 и все нечетные числа в Operator2 (или наоборот).

Это означает, что все четные числа должны быть умножены на 2 и 3, а все нечетные числа должны быть умножены на 4 и 5.

Но это не то, чего я ожидаю в качестве результата.Я ожидаю, что все числа будут умножены на 2,3,4,5, что является результатом, если параллелизм равен 1.

1 Ответ

0 голосов
/ 27 мая 2018

Прежде всего, множитель в вашем примере не является состоянием Флинка.Он является локальным для каждого экземпляра объекта java оператора.Если вы хотите использовать состояние Флинка, я рекомендую прочитать в этом документе раздел .

В вашем случае я думаю, что наиболее полезным типом состояния будет ссылка BroadcastState ().) представлен в Flink 1.5, который был реализован специально для описанного вами варианта использования.

...