Как настроить несколько заданий потоковой передачи Spark с различной длительностью пакета?
Мы находимся на начальных этапах преобразования текущей архитектуры данных крупного предприятия, и в настоящее время я создаю платформу Spark Streaming ETL, в которой мы бы подключили все наши источники к назначениям (источником/назначениями могут быть темы Кафки, Flume, HDFS и т. д.) через преобразования. Это будет выглядеть примерно так:
SparkStreamingEtlManager.addEtl(Source, Transformation*, Destination)
SparkStreamingEtlManager.streamEtl()
streamingContext.start()
Предположение состоит в том, что, поскольку у нас должен быть только один SparkContext, мы развернем все конвейеры ETL в одном применение / баночка.
Проблема в том, что batchDuration является атрибутом самого контекста, а не ReceiverInputDStream (почему это так?). Нужно ли поэтому иметь несколько кластеров Spark или, допустим, несколько SparkContexts и развернуть несколько приложений? Существует ли какой-либо другой способ контролировать длительность пакета для каждого получателя?
Пожалуйста, дайте мне знать, если какие-либо из моих предположений наивны или нуждаются в перефразировании. Спасибо!1 ответ:
По моему опыту, разные потоки имеют разные требования к настройке. Пропускная способность, задержка, пропускная способность принимающей стороны, SLA, которые должны соблюдаться, и т. д.
Чтобы удовлетворить эту множественность, мы должны настроить каждое потоковое задание Spark для решения указанной специфики. Таким образом, не только интервал пакетной обработки, но и ресурсы, такие как память и процессор, секционирование данных, # исполняющих узлов (когда нагрузки привязаны к сети).
Из этого следует, что каждое потоковое задание Spark становится отдельным развертывание заданий в кластере Spark. Это также позволит осуществлять мониторинг и управление отдельными трубопроводами независимо друг от друга и поможет в дальнейшей тонкой настройке процессов.
В нашем случае мы используем Mesos + Marathon для управления набором заданий Spark Streaming под управлением 3600x24x7.