通读AWS Managed Flink的文档,特别是“运行时属性”部分,我没有发现任何关于为给定Flink jar设置主类的内容。
它给出的示例固定了 POM.xml 中的主类。
我的情况是,我有一个多用途 Flink 应用程序,它有多个入口点(由多个主类表示),每个入口点执行一种专门的工作。然而,这些作业本质上是相似的,因此共享一组实用程序类、共存于同一个代码存储库中并在一个 jar 文件中一起发布是合理的。
无法在应用程序启动时设置入口类意味着我必须将共享实用程序类和单独的作业复制到单独的 jar 中。
我可能遗漏了一些东西,所以我想请教更有经验的专业人士:我是否可以得出结论,对于当前的AWS Managed Flink,无法在启动应用程序时设置主类,而必须硬编码到可执行jar中?
没错!您无法在 AWS Managed Flink 中定义入口点。但是,如果您使用 maven/gradle,常见的解决方法是使用配置文件并为每个配置文件设置不同的
mainClass
。
这是一个例子:
<profile>
<id>job-one</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.mainClass>org.example.JobOne</project.mainClass>
</properties>
<build>
<finalName>job-one-${project.version}</finalName>
</build>
</profile>
<profile>
<id>job-two</id>
<properties>
<project.mainClass>org.example.JobTwo</project.mainClass>
</properties>
<build>
<finalName>job-two-${project.version}</finalName>
</build>
</profile>
参考
mainClass
:<mainClass>${project.mainClass}</mainClass>
然后构建多个 jar:
mvn package -Pjob-one
和 mvn package -Pjob-two
如果作业太多并且创建多个 jar 很麻烦,请考虑使用 AWS EMR,它提供了更大的灵活性。