二进制发行版的 jar 包包含于lib
文件夹中,这些 jar 包会自行加入你的
分布式程序的 classpath 中。除了少数例外,几乎所有 Flink 的类都可以在那里找到,
例如流式连接器和一些新加入的模块。
为了运行依赖这些模块的代码,你需要确保模块在运行时是可访问的,为此我们有两点建议:
lib
文件夹,以提供给你所有的 TaskManagers 。注意,复制之后需要重启你的 TaskManagers 。推荐使用较新的版本,因为它遵循了 FLink 中的类加载管理器
在使用 maven 时,如果想要打包的依赖不在 Flink 包中,建议使用以下两种方法:
使用较新的方法来捆绑 Kafka 连接器flink-connector-kafka
,为此
你需要同时从连接器和 Kafka API 本身来添加加类。在你的插件配置中添加如下代码。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>unpack</id>
<!-- executed just before the package phase -->
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<!-- For Flink connector classes -->
<artifactItem>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka</artifactId>
<version>1.3-SNAPSHOT</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>org/apache/flink/**</includes>
</artifactItem>
<!-- For Kafka API classes -->
<artifactItem>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_<YOUR_SCALA_VERSION></artifactId>
<version><YOUR_KAFKA_VERSION></version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>kafka/**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
现在,如果执行mvn clean package
,产生的 jar 包将包含所需的依赖。