一.简介
每个 Flink 应用都需要依赖一组 Flink 类库。Flink 应用至少需要依赖 Flink APIs。许多应用还会额外依赖连接器类库(比如 Kafka、Cassandra 等)。 当用户运行 Flink 应用时(无论是在 IDE 环境下进行测试,还是部署在分布式环境下),运行时类库都必须可用。
二.Flink 核心依赖以及应用依赖
与其他运行用户自定义应用的大多数系统一样,Flink 中有两大类依赖类库:
- Flink 核心依赖:Flink 本身包含运行所需的一组类和依赖,比如协调、网络通讯、checkpoint、容错处理、API、算子(如窗口操作)、 资源管理等,这些类和依赖形成了 Flink 运行时的核心。当 Flink 应用启动时,这些依赖必须可用。
这些核心类和依赖被打包在 flink-dist_x.xx-x.xx.jar 里。它们是 Flink中lib 文件夹下的一部分,也是 Flink 基本容器镜像的一部分。 这些依赖类似 Java String 和 List 的核心类库(rt.jar, charsets.jar等)。
Flink 核心依赖不包含连接器和类库(如 CEP、SQL、ML 等),这样做的目的是默认情况下避免在类路径中具有过多的依赖项和类。 实际上,我们希望尽可能保持核心依赖足够精简,以保证一个较小的默认类路径,并且避免依赖冲突。 - 用户应用依赖:是指特定的应用程序需要的类库,如连接器,formats等。
用户应用代码和所需的连接器以及其他类库依赖通常被打包到 application jar 中。
用户应用程序依赖项不需包括 Flink DataSet / DataStream API 以及运行时依赖项,因为它们已经是 Flink 核心依赖项的一部分。
三.搭建一个项目的基础依赖
开发 Flink 应用程序需要最低限度的 API 依赖。Maven 用户,可以使用 Java 项目模板或者 Scala 项目模板来创建一个包含最初依赖的程序骨架。
手动设置项目时,需要为 Java 或 Scala API 添加以下依赖项(这里以 Maven 语法为例,但也适用于其他构建工具(Gradle、 SBT 等))。
<dependency>
<groupId>org.apache.flink<