5个不好的网站,安安网站建设,asp.net 发布网站 ftp,自己做的网站如何上百度曾经红遍一时的Scala
想当初Spark横空出世之后#xff0c;Scala简直就是语言界的一颗璀璨新星#xff0c;惹得大家纷纷侧目#xff0c;连Kafka这类技术框架也选择用Scala语言进行开发重构。 可如今#xff0c;Flink竟然公开宣布弃用Scala
在Flink1.18的官方文档里#x…曾经红遍一时的Scala
想当初Spark横空出世之后Scala简直就是语言界的一颗璀璨新星惹得大家纷纷侧目连Kafka这类技术框架也选择用Scala语言进行开发重构。 可如今Flink竟然公开宣布弃用Scala
在Flink1.18的官方文档里有一句非常严肃的话所有的Flink Scala APIs已被标记为废弃且将在未来版本中予以移除。
All Flink Scala APIs are deprecated and will be removed in a future Flink version. You can still build your application in Scala, but you should move to the Java version of either the DataStream and/or Table API.See FLIP-265 Deprecate and remove Scala API support究竟为何Flink舍弃Scala
为了一探究竟我特地研究了FLIP-265 Deprecate and remove Scala API support的文档其中内容如下。
Flink通过APIs方式来构建DataStream和TableAPI程序。这些是用Java和Scala写的。PythonAPI在底层使用JavaAPI。随着时间的推移Flink社区的主要焦点已经转向JavaAPI而Flink中的Scala支持与JavaAPI并不同步。举几个例子
Flink仍然仅支持Scala2.12.7如果要升级的画只能通过破坏兼容性升级到更高版本
截止到目前为止Flink还不支持Scala2.13
与Scala中的DataStreamAPI 相比Java中的DataStreamAPI具有更多可用功能。例如Async I/OFlink中Scala现状可以总结为( 机翻 )
大多数与Scala相关的贡献都集中在阻止用户在任何Scala版本中使用JavaAPI
Flink社区缺乏具有Scala知识的维护人员可以帮助直接在Flink中转发Scala支持
添加到Flink的新API接口首先是为Java创建的在Scala中没有或只有有限的支持
开源社区正在制定举措来帮助Flink中的Scala支持例如https://github.com/ariskk/flink4s为Scala3用户包装JavaAPI和https://github.com/findify/flink-adt取代了flink-scala 中的TypeInformation派生机制至于Scala版本之间的兼容性为何总是那么差其实很简单
当年Scala刚创出个头角时并未面临着保持兼容性的压力因为那时的它并不吃香也未受到大型企业的青睐。正是这种无人关注的状态使得维持兼容性变得无所谓。直至Scala 2.7.x版本前后它开始呈现出崛起之势一些新兴企业比如Twitter纷纷将其作为首选由此一来向后兼容性才成了头等大事。
在Scala 2.8.0开始起航之时该语言引入了一套特殊规则以最大程度上保持兼容性。对于Scala2来说版本划分更为明确2.major.minor只要主版本保持不变次要版本之间就能做到完美兼容。主版本的跨越往往会破坏二进制兼容性也就意味着编译生成的目标代码可能存在差异。
我曾与业界大佬咨询过这个问题他的回答是主版本跨度导致二进制兼容性遭受破坏的根本原因在于JVM字节码并不是特别为Scala而生的而是专为Java量身定做。当Scala引入新的特性时JVM并不会主动调整以支持这些新功能因此Scala必须在编译器生成的字节码中实现
另外当呼声极高的Java8集锦登场之际Java和JVM携手新增了诸多新功能这些新功能需要改变 Scala的执行机制以便更好地与Java8代码相互融合这也破坏了二进制兼容性。
但Scala3将引入一个特定的Scala的中间“字节码”这将允许不同的版本保持彼此的兼容性。 破案
Flink抛弃Scala的主要原因是因为社区缺少Scala相关的人员并且新的Api都是Java的另外因为兼容性问题Scala和JavaApi的发展并不同步。综上Flink抛弃Scala
为什么选择Java作为Apache Flink的首选API
选择Java作为Apache Flink的首选API是因为Java提供了一个稳定可靠的平台适合大规模的计算和流处理。Java拥有丰富的库和工具可以帮助开发者更高效地实现各种计算逻辑。此外Java的生态系统也非常庞大包含了很多优秀的工具和库使开发者能够更轻松地开发和维护Flink应用。Java的可移植性和跨平台性也是其受欢迎的原因之一。无论开发者身处何地他们都可以使用Java开发Flink应用并且在不同的平台上进行部署和运行。另外Java社区的活跃程度也是不容忽视的Java的开发者群体庞大且经验丰富他们可以为Flink提供宝贵的支持和指导从而帮助用户更好地使用和优化Flink的功能。总的来说Apache Flink选择使用Java API是基于Java的稳定性、可移植性、生态系统、社区活跃度等方面的综合考量