Различия между параллелизмом и несколькими приложениями во Flink - PullRequest
0 голосов
/ 25 сентября 2019

Я планирую динамически увеличивать / уменьшать приложение Flink.Приложение использует события от Kafka, используя соединитель kafka-flink.

Поскольку "прогрев" приложения занимает несколько минут (кэширование ...), а изменение уровня параллелизма включает перезапуски, я предпочитаю отправлять (масштабироватьup) или альтернативно убивать (уменьшать) задачи вместо изменения уровня параллелизма.

Интересно, с точки зрения производительности, логики и плана выполнения, есть ли различия между этим подходом и встроенным параллельным выполнением Flink?

Другими словами, каковы будут различия между 10 одинаковыми задачами Flink и одной задачей с уровнем параллелизма = 10 (env.setParallelism (10))?

1 Ответ

1 голос
/ 25 сентября 2019

Количество параллелизма будет сдерживать, если задание будет Перераспределять или нет

  • Потоки один-к-одному (например, между источником иоператоры map () на рисунке выше) сохраняют разбиение и упорядочение элементов.Это означает, что подзадача 1 оператора map () будет видеть те же элементы в том же порядке, в котором они были созданы подзадачей 1 оператора Source.
  • Перераспределение потоков (как между map () и keyBy / window выше, а также между keyBy / window и Sink) изменяет разделение потоков.Каждая операторская подзадача отправляет данные в различные целевые подзадачи в зависимости от выбранного преобразования.Примерами являются keyBy () (который перераспределяет путем хеширования ключа), broadcast () или rebalance () (который перераспределяет случайным образом).При перераспределении обмена порядок между элементами сохраняется только в каждой паре отправляющих и получающих подзадач (например, подзадача 1 map () и подзадача [2] keyBy / window).Таким образом, в этом примере порядок внутри каждого ключа сохраняется, но параллелизм вносит недетерминизм в отношении порядка, в котором агрегированные результаты для разных ключей поступают в приемник.
...