Несколько заданий или несколько конвейеров в одном задании во Flink - PullRequest
0 голосов
/ 24 августа 2018

У меня есть случай, когда я хочу запустить 2 независимых потока обработки на Flink. Таким образом, 2 потока будут выглядеть как

Source1 -> operator1 -> Sink1

Source2 -> operator2 -> Sink2

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

1) отправить 2 разных задания в одном приложении Flink

2) Настройка 2 конвейеров в одном задании

Мне удалось настроить первый вариант, но я не уверен, как это сделать. Кто-нибудь пробовал такую ​​настройку раньше? В чем преимущество одного над другим?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы можете просто создать несколько конвейеров (с отдельными или общими потребителями источника) в вашем методе setupJob (). Вот пример:

private void buildPipeline(StreamExecutionEnvironment env, String sourceName, String sinkName) {
    DataStream<T> stream = env
            .addSource(getInputs().get(sourceName))
            .name(sourceName);
    stream = stream.filter(evt -> filter());
    ....
}

@Override
public void setupJob(AthenaFlinkJobConfiguration jobConfig, StreamExecutionEnvironment env) throws Exception {
    ...
    buildPipeline(env, sourceTopic1, sink1, ...);
    buildPipeline(env, sourceTopic2, sink2, ...);
    ...
}

Вот краткий контраст обоих подходов. Плюсы / минусы использования отдельных заданий:

  • [+] Код проще.
  • [+] Большая гибкость настройки низкоуровневой конфигурации (механизм отказоустойчивости, размер кучи, параллелизм и т. Д.)
  • [-] Более высокие затраты на инфраструктуру, поскольку ресурсы не используются совместно.
  • [-] Обслуживание и мониторинг более сложны и требуют много времени.

Преимущества использования отдельного конвейера в одном задании:

  • [+] Отслеживать и отлаживать одну работу проще.
  • [+] Исправления фиксируются в одном репо и развертываются в одной среде.
  • [+] Экономичный: снижает затраты на оборудование и инфраструктуру.
  • [-] Невозможно ограничить использование одного конвейера.
  • [-] Сбои в одном конвейере, влияющие на другой конвейер.
  • [-] Противодавление в одном трубопроводе может повлиять на всю работу, поскольку для каждого задания снимается одна контрольная точка.
0 голосов
/ 25 августа 2018

Второй подход может быть реализован путем определения двух независимых конвейеров в одном и том же StreamExecutionEnvironment и простого вызова StreamExecutionEnvironment.execute() один раз.

Я бы использовал первый подход, потому что он дает вам лучшую изоляцию. Flink перезапускает всю работу в случае сбоя. Следовательно, оба конвейера будут сброшены и перезапущены в случае сбоя, если вы внедрите оба конвейера в одном задании. Также вы можете самостоятельно брать точки сохранения, если вы следуете подходу 1.

...