Как руководитель проекта Spring Batch, я уверен, вы поймете, что у меня есть конкретная точка зрения.Однако, прежде чем начать, я должен сказать, что фреймворки, о которых мы говорим, были разработаны для двух очень разных вариантов использования.Spring Batch был разработан для обработки традиционной корпоративной пакетной обработки на JVM.Он был разработан для применения хорошо понятных шаблонов, которые являются общими в корпоративной пакетной обработке, и делает их удобными в рамках JVM.Spark, с другой стороны, был разработан для случаев использования больших данных и машинного обучения.Эти варианты использования имеют разные модели, проблемы и цели, чем традиционная корпоративная пакетная система, и это отражено в дизайне платформы.При этом, вот мои ответы на ваши конкретные вопросы.
Кто-нибудь сравнивал производительность между Apache Spark и Java Spring Batch?
Никто не может ответить на этот вопросвопрос для вас.Тесты производительности - это очень специфическая вещь.Случаи использования имеют значение.Аппаратные вопросыЯ призываю вас сделать свои собственные тесты производительности и профилирования производительности, чтобы определить, что лучше всего подходит для ваших вариантов использования в топологиях развертывания.
Какие могут быть преимущества использования Spring Batch перед Spark?
Модель программирования, аналогичная другим рабочим нагрузкам предприятия
Предприятия должны знать о ресурсах, которые они имеют под рукой при принятии архитектурных решений.Стоит ли использовать новую технологию X для переподготовки или найма технологии Y?В случае Spark против Spring Batch наращивание для существующего разработчика Spring в Spring Batch очень минимально.Я могу взять любого разработчика, который знаком с Spring, и очень быстро сделать его полностью продуктивным с Spring Batch.У Spark есть более крутая кривая обучения для среднего корпоративного разработчика, не только из-за накладных расходов на изучение инфраструктуры Spark, но и всех связанных с этим технологий, чтобы продвигать работу Spark в этой экосистеме (HDFS, Oozie и т. Д.).
Не требуется выделенная инфраструктура
При работе в распределенной среде вам необходимо настроить кластер с помощью YARN, Mesos или собственной кластерной установки Spark (на момент написания этой статьи была доступна экспериментальная опция Kubernetes), но, как уже отмечалось, он помечен как экспериментальный).Это требует выделенной инфраструктуры для конкретных случаев использования.Spring Batch может быть развернут на любой инфраструктуре.Вы можете выполнить его через Spring Boot с исполняемыми файлами JAR, вы можете развернуть его в контейнерах сервлетов или на серверах приложений, а также можете запускать задания Spring Batch через YARN или любого облачного провайдера.Более того, если вы используете концепцию исполняемого JAR Spring Boot, вам нечего настраивать заранее, даже если вы запускаете распределенное приложение в той же облачной инфраструктуре, на которой запускаете другие рабочие нагрузки.
ПодробнееИз коробки считыватели / писатели упрощают создание рабочих мест
Экосистема Spark ориентирована на случаи использования больших данных.Из-за этого компоненты, предоставляемые из коробки для чтения и записи, ориентированы на эти варианты использования.Такие вещи, как различные опции сериализации для чтения файлов, обычно используемые в случаях использования больших данных, обрабатываются изначально.Однако обработка таких вещей, как фрагменты записей внутри транзакции, не выполняется.
Spring Batch, с другой стороны, предоставляет полный набор компонентов для декларативного ввода и вывода.Чтение и запись простых файлов, файлов XML, из баз данных, из хранилищ NoSQL, из очередей обмена сообщениями, записи электронных писем ... этот список можно продолжить.Spring Batch предоставляет все это из коробки.
Spark был создан для больших данных ... не все варианты использования - это случаи использования больших данных
КорочеФункции Spark характерны для той области, для которой он был создан: большие данные и машинное обучение.Такие вещи, как управление транзакциями (или транзакциями вообще) не существуют в Spark.Идея отката при возникновении ошибки не существует (насколько мне известно) без специального кода.Более надежные варианты использования обработки ошибок, такие как пропуск / повтор, не предусмотрены на уровне платформы.Управление состоянием для таких вещей, как перезапуск, в Spark намного тяжелее, чем в Spring Batch (сохранение всей RDD по сравнению с сохранением тривиального состояния для определенных компонентов).Все эти функции являются встроенными в Spring Batch.
Является ли Spring Batch «действительно распределенным»
Одним из преимуществ Spring Batch является возможность развивать пакет.процесс от простого последовательно выполняемого единого процесса JVM до полностью распределенного кластерного решения с минимальными изменениями.Spring Batch поддерживает два основных распределенных режима:
- Удаленное разбиение на разделы - здесь Spring Batch работает в конфигурации мастер / рабочий.Мастера делегируют работу рабочим на основе механизма оркестровки (здесь много вариантов).Полный перезапуск, обработка ошибок и т. Д. - все это доступно для этого подхода с минимальными затратами сети (передача метаданных, описывающих только каждый раздел) в удаленные JVM.Spring Cloud Task также предоставляет расширения для Spring Batch, которые позволяют облачным механизмам динамического развертывания рабочих.
- Удаленное разделение на блоки - Удаленное разделение на блоки делегирует только этапы обработки и записи шагаудаленная JVM.Все еще используя конфигурацию мастер / работник, мастер отвечает за предоставление данных работникам для обработки и записи.В этой топологии данные передаются по проводам, что вызывает большую нагрузку на сеть.Обычно он используется только тогда, когда преимущества обработки могут превысить накладные расходы на добавленный сетевой трафик.
Существуют другие ответы Stackoverflow, которые более подробно обсуждают эти функции (как это делается в документации):
Преимущества подпружиненной партии
Разница между дистанционным разделением на блоки подпружиненной партии и дистанционным разделением
Документация подпружиненной партии