Итак, keyBy
или groupBy
вызывает перестановку в сети, которая перераспределяет поток. Говорят, что это довольно дорого, поскольку включает в себя сетевую связь, а также сериализацию и десериализацию и т. Д. c.
Например, если я запускаю следующие операторы:
map(Mapper1).keyBy(0).map(Mapper2)
с параллелизмом 2 я бы получил что-то вроде этого:
Mapper1(1) -\-/- Mapper2(1)
X
Mapper1(2) -/-\- Mapper2(2)
И в конце все записи с одинаковым ключом в Mapper1
назначаются одному и тому же разделу в Mapper2
.
Мой вопрос:
Я хочу знать, что происходит во время потоковой передачи keyBy
или groupBy
. Каждый обработанный элемент сериализуется и десериализуется каждой подзадачей? Как я могу сравнить стоимость keyBy
или groupBy
с другой операцией?
Кроме того, я знаком с концепцией разделителя в пакетных системах, но меня немного смущает, когда я пытаюсь применить это в потоковой передаче.
Спасибо!