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 类型来决定。

相关推荐
阿里云大数据AI技术1 小时前
官宣|Apache Fluss 毕业成为顶级项目,湖流一体开启 Agentic Lake 全面实时化时代
人工智能·flink
Blossom i9 小时前
分布式编程实验二:Flink安装与编程实践(头歌云客)
大数据·分布式·flink
渣渣盟1 天前
当反压问题解决后,如何进一步优化 Flink 作业的 Checkpoint 性能,让大状态作业也能稳定运行?
大数据·flink
渣渣盟1 天前
当 Redis 写入不再是瓶颈后,Flink 任务的反压可能来自哪里?如何系统性地定位和解决 Flink 反压问题?
数据库·redis·flink
渣渣盟1 天前
当 Redis 集群发生主从切换(Failover)时,Flink 任务会崩溃吗?如何利用 Sentinel 实现高可用?
redis·flink·sentinel
渣渣盟1 天前
当 Checkpoint 稳定运行后,如何进一步优化 Flink 作业的启动和恢复速度,让大状态作业的扩缩容从“小时级”降到“分钟级”?
大数据·flink
ZCBUS实时计算2 天前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
让头发掉下来3 天前
Flink SQL 中两个频繁变化 Topic 的 Join 行为分析
大数据·数据库·sql·flink
头茬韭菜3 天前
Apache Fluss 项目深度分析与技术文档系列计划
flink·spark·realtime·fluss
渣渣盟4 天前
Flink 单流转换算子深度解析:从 Map 到 Reduce 的流式处理基石
大数据·flink