FLIP-265 弃用并移除Scala API支持

2023-04-18 11:36:19.0

FLIP-265 Deprecate and remove Scala API support

动机

Apache Flink提供了使用DataStream和表API构建Flink应用程序的API。这些API以Java和Scala语言提供。Python API在底层使用Java API。 随着时间的推移,Flink社区的主要焦点已经转移到Java API上,而Flink中的Scala支持并没有达到Java API的水平。举几个例子:

  • 1. Flink仍然只支持Scala 2.12.7,并且只能通过破坏兼容性升级到Scala 2.12的更高版本。
  • 2. Flink不支持Scala 2.13。
  • 3. 与Scala中的DataStream API相比,Java中的DataStream API具有更多可用的特性。

在Flink 1.15之前,它非常依赖Scala (Scala总是在类路径上)。从Flink 1.15开始,可以选择使用任何Scala版本的Java API。

Flink中Scala的当前状态可以总结为:

  • 大多数与Scala相关的贡献都集中在消除用户在任何Scala版本中使用Java API的障碍上。
  • Flink社区缺乏具有Scala知识的维护者,他们可以帮助直接在Flink中转发Scala支持。
  • 添加到Flink的新API接口首先是为Java创建的,在Scala中没有或只有有限的支持。
  • 开源社区(在ASF Flink项目之外)正在创建一些举措来帮助Flink支持Scala,例如https://github.com/ariskk/flink4s(为Scala 3用户包装Java API)和https://github.com/findify/flink-adt(取代flink-scala中的'TypeInformation'派生机制)。

鉴于Scala的当前状态,本FLIP建议弃用Flink 1.17中的所有Scala API,并从Flink 2.0中删除所有Scala API。

Flink中使用Scala的一个主要部分是表规划器(table-planner)。这超出了弃用的范围,因为这些是@Internal接口。从表规划器中删除Scala仍然被认为是未来的工作,正如FLIP-32中首先概述的那样。

修改建议

在下一个Flink 1.x版本中弃用所有面向客户的Scala API,意思是:

  • 我们将所有的@Public、@PublicEvolving 和@Experimental Scala API注释为@Deprecated。
  • 我们从代码库中删除了所有Scala API代码示例。
  • 我们删除了所有Scala API文档。

在下一个Flink主版本(2.x)中删除这些API。

兼容性、弃用和迁移计划

依赖Scala API的用户可以也应该考虑从Java API移植到等价的API。

否则,Flink 1.x将是Flink Scala用户可以使用的最后一个版本。


《Flink原理深入与编程实战》