flink依赖版本选择

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


**1. 带 Scala 版本的依赖**

  • **含义**:

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

  • **原因**:

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

  • **示例**:

```xml

<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 编译的库通常可以混用。

  • **示例**:

```xml

<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):

```xml

<dependency>

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

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

<version>1.14.0</version>

</dependency>

```

  • **Java 项目**:

```xml

<dependency>

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

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

<version>1.14.0</version>

</dependency>

```


**总结**

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

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

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

相关推荐
从头再来的码农20 小时前
大数据Flink相关面试题(一)
大数据·flink
MarkHD2 天前
第四天 从CAN总线到Spark/Flink实时处理
大数据·flink·spark
SparkSql2 天前
FlinkCDC采集MySQL8.4报错
大数据·flink
james的分享2 天前
Flink之Table API
flink·table api
涤生大数据2 天前
带你玩转 Flink TumblingWindow:从理论到代码的深度探索
flink·理论·代码·tumblingwindow
Apache Flink3 天前
网易游戏 Flink 云原生实践
游戏·云原生·flink
SunTecTec4 天前
SQL Server To Paimon Demo by Flink standalone cluster mode
java·大数据·flink
工作中的程序员5 天前
flink监控指标
flink
小马爱打代码5 天前
SpringBoot整合Kafka、Flink实现流式处理
spring boot·flink·kafka