Сеть в случайном порядке - PullRequest
0 голосов
/ 19 марта 2020

Итак, 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 с другой операцией?

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

Спасибо!

1 Ответ

1 голос
/ 07 апреля 2020

Итак Apache Flink буферизирует исходящее задание и после этого отправляет его следующему заданию для обработки. setBufferTimeout - это параметр на уровне задания, который можно настроить с помощью StreamExecutionEnvironment, и значение по умолчанию для этого тайм-аута составляет 100 мс. По истечении этого времени буферы отправляются автоматически, даже если они не заполнены.

Также следующие ссылки действительно полезны для понимания деталей:

https://flink.apache.org/2019/06/05/flink-network-stack.html

https://flink.apache.org/2019/07/23/flink-network-stack-2.html

...