Как отправить несколько заданий Flink с помощью приложения Single Flink - PullRequest
0 голосов
/ 02 августа 2020

Допустим, у меня есть приложение Flink для фильтрации, преобразования и обработки потока.

Как разбить это приложение на два задания и передавать их ч / б без использования прерывистого хранилища.

Обратитесь к изображению ниже для получения информации о потоке данных.

Причина варианта использования:

Размер события: 2 КБ , Event lite: 200Б , TPS: 1M

Для эффективного использования Java Heap для хранения большего количества событий в любой момент времени требуется преобразование. Выполнение всех трех задач в одном TaskManager имеет недостаток, заключающийся в том, что также сохраняет загруженные события, где почти 80% событий не требуется.

Выполнение этих заданий в разных диспетчерах задач даст большую гибкость в масштабировании функции обработки.

Нужна помощь в достижении этого, любые предложения приветствуются. Также пытаюсь понять, как несколько заданий могут быть отправлены через одно приложение Flink.

введите описание изображения здесь

1 Ответ

1 голос
/ 02 августа 2020

Несколько точек:

Режим приложения , представленный в Flink 1.11, позволяет одному методу main() отправлять несколько заданий, но нет механизма для прямой связи между этими заданиями. Подход Flink к отказоустойчивости с помощью моментальных снимков не распространяется на управление состоянием более чем в одной задаче. Но вы откажетесь от отказоустойчивости, если сделаете это.

Вы можете добиться чего-то похожего на то, о чем вы просили, настроив группу совместного использования слотов, которая заставляет заключительный этап (ы) конвейера в их собственный слот (ы). Тем не менее, это почти наверняка плохая идея, так как это приведет к принудительному запуску, который в противном случае может быть ненужным, а также приведет к более низкому использованию ресурсов. Но он разделит эти этапы конвейера на другую JVM.

Если цель состоит в том, чтобы иметь отдельно развертываемые и независимо масштабируемые компоненты, вы можете получить это, используя удаленные функции с Stateful Functions API .

Чтобы максимизировать производительность (и свести к минимуму сборку мусора) с помощью того типа задания ETL, который вы показали, вам, вероятно, будет лучше, если вы воспользуетесь преимуществами объединения операторов и повторного использования объектов и сохраните все в одном задании .

...