目录

flink依赖版本选择

flink依赖版本选择

带 Scala 版本的依赖和不带 Scala 版本的依赖之间的区别主要与 Scala 的二进制兼容性有关。以下是详细解释:


1. 带 Scala 版本的依赖

  • 含义

依赖名称中带有 Scala 版本(如 flink-streaming-scala_2.12),表示该依赖是为特定 Scala 版本编译的。

  • 原因

Scala 的二进制兼容性较差,不同版本的 Scala 编译的库通常不能混用。因此,Flink 等库会为不同的 Scala 版本提供单独的构建版本。

  • 示例

<dependency>

<groupId>org.apache.flink</groupId>

<artifactId>flink-streaming-scala_2.12</artifactId>

<version>1.14.0</version>

</dependency>

这里的 _2.12 表示该依赖是为 Scala 2.12 编译的。

  • 适用场景

  • 使用 Scala 编写的项目。

  • 使用 Flink 的 Scala API。


2. 不带 Scala 版本的依赖

  • 含义

依赖名称中不包含 Scala 版本(如 flink-streaming-java),表示该依赖是用纯 Java 编写的,与 Scala 版本无关。

  • 原因

Java 的二进制兼容性较好,不同版本的 Java 编译的库通常可以混用。

  • 示例

<dependency>

<groupId>org.apache.flink</groupId>

<artifactId>flink-streaming-java</artifactId>

<version>1.14.0</version>

</dependency>

这个依赖是纯 Java 实现的,不依赖于 Scala。

  • 适用场景

  • 使用 Java 编写的项目。

  • 使用 Flink 的 Java API。


3. 主要区别

| 特性 | 带 Scala 版本的依赖 | 不带 Scala 版本的依赖 |

|————————|—————————————-|———————————-|

| 依赖名称 | 包含 Scala 版本(如 _2.12) | 不包含 Scala 版本 |

| 实现语言 | 用 Scala 实现 | 用 Java 实现 |

| 兼容性 | 必须与项目的 Scala 版本一致 | 与 Scala 版本无关 |

| 适用场景 | Scala 项目,使用 Flink 的 Scala API | Java 项目,使用 Flink 的 Java API |

| 示例依赖 | flink-streaming-scala_2.12 | flink-streaming-java |


4. 为什么需要区分?

  • Scala 的二进制兼容性问题

Scala 2.11、2.12、2.13 等版本之间的二进制兼容性较差。例如,用 Scala 2.12 编译的库不能在 Scala 2.13 项目中使用。

  • Java 的兼容性

Java 的二进制兼容性较好,通常不需要为不同 Java 版本提供单独的构建版本。


5. 如何选择?

  • 如果你的项目是 Scala 项目,并且使用了 Flink 的 Scala API,则需要选择带 Scala 版本的依赖,并确保 Scala 版本一致。

  • 如果你的项目是 Java 项目,或者只使用 Flink 的 Java API,则选择不带 Scala 版本的依赖即可。


示例对比

  • Scala 项目(使用 Scala 2.12):

<dependency>

<groupId>org.apache.flink</groupId>

<artifactId>flink-streaming-scala_2.12</artifactId>

<version>1.14.0</version>

</dependency>
  • Java 项目

<dependency>

<groupId>org.apache.flink</groupId>

<artifactId>flink-streaming-java</artifactId>

<version>1.14.0</version>

</dependency>

总结

  • 带 Scala 版本的依赖是为特定 Scala 版本编译的,适用于 Scala 项目。

  • 不带 Scala 版本的依赖是用 Java 实现的,适用于 Java 项目。

  • 选择依赖时,需要根据项目语言和使用的 API 类型来决定。