Могу ли я иметь несколько подзадач оператора в одном слоте во Flink?

Я изучал Apache Flink в течение нескольких дней, и у меня есть некоторые сомнения относительно концепции Task Slot. Хотя об этом было задано несколько вопросов, есть момент, которого я не понимаю.

Я использую игрушечное приложение для тестирования, запуская локальный кластер. Я отключил цепочку операторов

Из документации я знаю, что слоты позволяют изолировать память, а не ЦП. Читая документы, кажется, что слот задач - это поток Java.

1) Когда я развертываю свое приложение с parallelism=1, все подзадачи операторов развертываются в одном слоте. Однако, если я распечатаю идентификатор текущего потока из метода open() метода AbstractStreamOperator, я увижу разные идентификаторы для разных подзадач. Итак, разве они не используют один и тот же поток (то есть слот?).

2) Если я меняю параллелизм с 1 на 3, мне нужно 3 слота, чтобы приложение было правильно переразвернуто. Документация подтверждает, что количество слотов ограничивает параллелизм, который я могу иметь. Но почему у меня могут быть подзадачи разных операторов в одном слоте, а подзадачи одного оператора в одном слоте быть не может?

Спасибо за любое объяснение!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
626
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Идея слотов состоит в том, чтобы разделить доступные ресурсы на более мелкие части. Доступная управляемая память равномерно распределяется между всеми слотами. Циклы ЦП и память кучи JVM не изолированы должным образом относительно слотов.

В каждом слоте можно развернуть один или несколько Tasks. Flink Task выполняется выделенным потоком. Таким образом, вы можете иметь несколько потоков, работающих в одном и том же слоте, если у вас развернуто несколько Tasks.

Task представляет собой параллельный экземпляр одного оператора Flink или нескольких операторов, если они могут быть объединены в цепочку. Цепочка не всегда возможна или желательна, но если ее применить, она объединит операторы, чтобы они выполнялись одним и тем же Task потоком. Обычно это более эффективно, так как меньше переключений контекста и нет передачи записей другому потоку.

Чтобы улучшить использование ресурсов (особенно для Tasks, которым требуется мало ресурсов) и упростить рассуждение о том, сколько слотов вам нужно для запуска программы Flink, Flink поддерживает совместное использование слотов. Совместное использование слотов означает, что параллельные экземпляры разных операторов могут быть развернуты в одном и том же слоте. Благодаря этой особенности Flink создает как можно более длинные пайплайны разных операторов и разворачивает их в один и тот же слот. Это также дает хороший эффект, заключающийся в том, что вы увеличиваете совместное размещение производителей с их соответствующими потребителями. Благодаря этой функции пользователи знают, что им нужно предоставить столько слотов, сколько максимальный параллелизм всех операторов одной топологии.

Однако, поскольку вы по-прежнему хотите распределять параллельные экземпляры оператора по всем доступным TaskExecutors, Flink не поддерживает развертывание параллельных экземпляров одного и того же оператора в одном и том же слоте. Если вы хотите это сделать, то вам следует просто уменьшить параллелизм соответствующего оператора до 1.

Другие вопросы по теме