- 每个Flink程序都依赖于一组Flink库。
1.Flink核心和应用程序依赖项
- Flink本身由一组类和运行需要的依赖组成。所有类和依赖的组合形成了Flink运行时的核心,并且当一个Flink程序运行时必须存在。
- 这些核心类和依赖被打包成
flink-dist.
jar。 - 为了在默认情况下避免过多的依赖关系和类在classpath中,Flink核心依赖不包含任何连接器或库(CEP, SQL, ML, etc.)。我们应该尽可能保持核心依赖"苗条"去保持默认classpath较小,避免依赖冲突。
- 用户应用程序依赖关系都是连接器,格式,或一个特定的用户应用程序的需要的库。
- 用户应用程序通常是打包成一个jar包,它包含应用程序代码和所需的连接器和库依赖。
- 用户应用程序依赖关系明确不包括FlinkDataSet/ DataStream APIs和运行时依赖,因为这些已经是Flink核心依赖关系的一部分。
2.设置一个项目:基本依赖项
- 每个Flink应用程序都需要最低限度的API依赖关系来进行开发。所有这些依赖项都将其范围设置为提供。这意味着需要对它们进行编译,但不应将它们打包到项目生成的应用程序jar文件中 ,这些依赖项是Flink核心依赖项,它们已在任何设置中被提供。。如果它们未设置为提供,则最好的情况是生成的jar包变得过大,因为它还包含所有Flink核心依赖项。最糟糕的情况是添加到应用程序的jar包的Flink核心依赖项与您自己的一些依赖版本冲突(通常通过反向类加载来避免)。
- 要使应用程序在IntelliJ IDEA中运行,需要声明Flink依赖项在编译范围中,而不是提供。为了避免必须将依赖范围声明为编译,可以给它们添加了一个配置文件,该应用程序在IntelliJ中运行时有选择地激活在不影响JAR文件打包的情况下,将依赖关系提升到范围编译。
3.添加连接器和库依赖项
- 大多数应用程序需要运行特定的连接器或库,例如连接到Kafka,Cassandra等的连接器。这些连接器不是Flink的核心依赖项的一部分,因此必须作为依赖项添加到应用程序中。
- 建议将应用程序代码及其所有必需的依赖项打包到一个jar-with-dependencies中,我们将其称为应用程序jar。应用程序jar可以提交给已经运行的Flink集群,也可以添加到Flink应用程序容器映像中。
- 对于Maven(和其他构建工具)将依赖项正确打包到应用程序jar中,必须在范围编译中指定这些应用程序依赖项(与核心依赖项不同,核心依赖项必须在提供的作用域中指定)