Flink: Как использовать тонкую банку вместо толстой?

В настоящее время мы развертываем наши приложения Flink в виде толстой фляги с помощью плагина maven-shade-plugin. Проблема в том, что каждая фляга приложения в итоге занимает примерно 130-140 МБ, что каждый раз создает и развертывает. Есть ли способ исключить зависимости и просто развернуть тонкий кластер в кластере размером около 50 КБ?

2 ответа

Вы можете поместить JAR-файлы зависимостей в кластер заранее в Flink's lib (см. Избегайте динамической загрузки классов) и просто загружайте тонкий JAR при каждой отправке задания.

Вот как мы это делаем с Gradle!

У нас есть два подпроекта:

  • job: Для потоковой работы, которую мы хотим запустить
  • runtime: Для дополнительных зависимостей во время выполнения (например, FileSystem реализация)

Мы создаем новую конфигурацию Gradle для зависимостей, которые предоставляются во время выполнения:

configurations {
  provided,
  compile.extendsFrom provided
}

и затем пометьте предоставленные зависимости как:

provided("org.apache.flink:flink-java:1.6.0")  // flink java v1.6.0

Затем мы модифицируем jar Задача построить банку без каких-либо provided зависимости:

jar {
  dependsOn configurations.runtime
  from {
    (configurations.runtime - configurations.provided).collect {
      it.isDirectory()? it : zipTree(it)
    }
  } {
    exclude 'META-INF/*.RSA'
    exclude 'META-INF/*.SF'
    exclude 'META-INF/*.DSA'
  }
  manifest {
    attributes 'Main-Class': 'com.example.Entrypoint'
  }
}

Результатом является jar с необходимыми зависимостями (compile) в комплекте, который мы затем развертываем с помощью веб-интерфейса.

Что касается пользовательских зависимостей во время выполнения, мы создаем собственный образ Docker и помещаем встроенный артефакт (runtime.jar построен с использованием той же конфигурации, что и выше) к libs/ каталог во Флинке. Вы также можете сделать это вручную, если не используете Docker.

И, наконец, в нашем конкретном случае не существует прямой зависимости, определенной между нашей работой и зависимостью времени выполнения (которая обнаруживается с помощью отражения).

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