当前位置: 首页 > news >正文

为什么 Flink 抛弃了 Scala

曾经红遍一时的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/O

Flink中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的稳定性、可移植性、生态系统、社区活跃度等方面的综合考量

相关文章:

为什么 Flink 抛弃了 Scala

曾经红遍一时的Scala 想当初Spark横空出世之后,Scala简直就是语言界的一颗璀璨新星,惹得大家纷纷侧目,连Kafka这类技术框架也选择用Scala语言进行开发重构。 可如今,Flink竟然公开宣布弃用Scala 在Flink1.18的官方文档里&#x…...

scala 实现表达式解析

表达式解析 import org.junit.Testimport scala.collection.mutableclass ExprTestCase {private val orderSource "source_1"private val saleChannel "saleChannel"val datas new mutable.HashMap[String, String]();// p1, source1, sale1, source…...

分布式事务seata的AT模式介绍

分布式事务seata的AT模式介绍 seata是阿里开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,本文主要介绍AT模式的使用。 seata安装 下载seata服务,官方地址…...

初识Linux(1),看了这篇文章,妈妈再也不用担心我Linux找不到门了。

文章目录 前言1. ls 指令例如:只显示文件名属性ls显示文件详细属性 ls - l 该操作可以简写成ll查看隐藏文件ls -l -a 2.pwd例如:显示当前目录所处的路径类似于windows如下操作: 3.cd 指令例如:改变工作目录相当于windows如下操作 4.whoami 指…...

甲烷产生及氧化

温室气体排放被认为是加速气候变化的重要因素,甲烷(CH4)是仅次于二氧化碳(CO2)的重要温室气体,其百年温室效应潜势是CO2的28倍[1-2]。湿地中的CH4由产甲烷古菌在水体底部或沉积层严格厌氧环境下产生并释放进入水体,产生的CH4向上覆水运输过程…...

Javascript的form表单校验输入框

以下是HTML代码&#xff1a; <form name"myForm" onsubmit"return validateForm()"><label for"name">姓名&#xff1a;</label><input type"text" id"name" name"name"><br><l…...

大数据-之LibrA数据库系统告警处理(ALM-37003 GTM主备不同步或者GTM主备断连)

告警解释 当GTM主实例与GTM备实例连接异常或者GTM主实例未处于同步状态时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37003 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产…...

python每日一题——4移动0

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...

CAN实验

CAN 寄存器 HAL库函数 代码 #include "./BSP/CAN/can.h"CAN_HandleTypeDef g_can1_handle; CAN_TxHeaderTypeDef g_can1_txheader; CAN_RxHeaderTypeDef g_can1_rxheader;/* STM32F103 TS1 8 TS2 7 BRP 3 波特率&#xff1a;36000 / [(9 8 1) * 4] 500Kbps …...

(一)pytest自动化测试框架之生成测试报告(mac系统)

前言 我们可以通过pytest-html插件来生成测试报告&#xff0c;但是pytest-html插件生成的测试报告不够美观&#xff0c;逼格也不够高&#xff0c;通过allure生成的测试报告是比较美观的&#xff0c;花里胡哨的&#xff0c;能够提升一个level。 allure官网&#xff1a; Allure…...

微服务实战系列之Nginx

前言 Nginx&#xff1f;写了那么多文章&#xff0c;为什么今天才轮到它的表演&#xff1f;那是因为它实在太重要了&#xff0c;值得大书特书&#xff0c;特别对待。 当我们遇到单点瓶颈&#xff0c;第一个idea是&#xff1f;Nginx&#xff1b; 当我们需要反向代理&#xff0c;…...

使用rsync从OpenShift的pod复制文件

环境 Red Hat Enterprise Linux release 8.6 (Ootpa)OCP 4.12.22 准备 安装rsync&#xff1a; yum install rsync 查看pod&#xff1a; [rootapi.kai1123.cp.fyre.ibm.com ~]# oc get pod -n cpd-instance | grep dmc ...... ibm-dmc-1700727413211000-monitor-0 …...

解决Activiti5.22流程图部署在Windows上正常,但在linux上部署后出现中文变方块的问题

总结/朱季谦 楼主最近在做公司的工作流平台&#xff0c;发现一个很无语的事情&#xff0c;Activiti5.22的流程图在Windows环境上部署&#xff0c;是可以正常查看的&#xff0c;但发布到公司的Linux服务器上后&#xff0c;在上面进行流程图在线部署时&#xff0c;发现中文都变成…...

EMG肌肉电信号处理合集(三)

本文主要展示常见的肌电信号预处理的实现&#xff0c;开发环境为matlab。 目录 1 肌电信号低通&#xff0c;高通&#xff0c;带通滤波 2 去除DC 0阶偏置&#xff0c;1阶偏置 3 全波整流 4 信号降采样 5 linear envolope / butterworth 低通滤波器 1 肌电信号低通&#xf…...

GitHub桌面版

GitHub桌面版 一、GitHub 桌面版二、clone 仓库三、更新仓库 一、GitHub 桌面版 二、clone 仓库 三、更新仓库...

【广州华锐互动】昆虫3D虚拟动态展示:探索神奇的微观世界

在这个充满科技魅力的时代&#xff0c;我们可以通过各种方式去了解和探索自然界的奥秘。而昆虫作为地球上最为丰富多样的生物群体之一&#xff0c;其独特的生活习性和形态特征一直吸引着人们的目光。 由广州华锐互动开发的昆虫3D虚拟动态展示系统&#xff0c;成为了一种全新的科…...

《QT从基础到进阶·三十六》QWidget实现收缩栏的效果

功能&#xff1a; 1、可以在收缩栏插件中添加界面 2、可以把界面展开或收缩 3、可以用鼠标拖动界面改变界面的排放顺序 源码放在最下方 1、可以在收缩栏插件中添加界面 virtual void addWidget(QWidget* widget, const QString& label, const QIcon& icon QIcon())…...

运行软件报错找不到vcruntime140.dll无法继续执行代码怎么办-6个解决方法

vcruntime140.dll是一个由Microsoft Visual C提供的运行时库文件&#xff0c;它为许多Microsoft Visual Studio开发的应用程序提供了必要的支持。这个文件对于许多Windows应用程序的正常运行至关重要。然而&#xff0c;有时会出现vcruntime140.dll缺失的问题&#xff0c;导致应…...

从Discord的做法中学习 — 使用Golang进行请求合并

正如你可能之前看到的&#xff0c;Discord去年发布了一篇有价值的文章&#xff0c;讨论了他们成功存储了数万亿条消息。虽然有很多关于这篇文章的YouTube视频和文章&#xff0c;但我认为这篇文章中一个名为“数据服务为数据服务”的部分没有得到足够的关注。在这篇文章中&#…...

【教3妹学编程-算法题】统计和小于目标的下标对数目

2哥 : 3妹&#xff0c;OpenAI的宫斗剧迎来了大结局&#xff01;OpenAI宣布阿尔特曼复职CEO&#xff0c;董事会重组 3妹&#xff1a;啊&#xff1f;到底谁才是幕后操纵者啊&#xff0c;有咩有揪出来 2哥 : 也不是很清楚&#xff0c;据说在被开除的几周前&#xff0c;前CEO曾谴责…...

从手机芯片到自动驾驶:算力单位TOPS/MACs/FLOPS是如何影响你每天使用的技术的?

从手机芯片到自动驾驶&#xff1a;算力单位如何塑造你的数字生活&#xff1f; 清晨的闹钟响起时&#xff0c;你拿起手机用面部识别解锁&#xff0c;语音助手根据指令调整空调温度&#xff0c;通勤路上汽车自动保持车道——这些场景背后都有一场看不见的算力博弈。当我们谈论TO…...

Go语言怎么做API限流_Go语言令牌桶限流教程【实战】

Go 推荐用 golang.org/x/time/rate.Limiter 实现令牌桶限流&#xff0c;因其轻量、线程安全、支持突发控制&#xff1b;需复用实例、合理设置 rate 和 burst&#xff08;如 rate.Every(100ms), burst20&#xff09;&#xff0c;并在路由前统一拦截&#xff0c;避免误用 Allow()…...

Redis客户端连接监控终极指南:Redisson CLIENT LIST命令深度解析

Redis客户端连接监控终极指南&#xff1a;Redisson CLIENT LIST命令深度解析 【免费下载链接】redisson Redisson - Valkey & Redis Java client. Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: S…...

如何通过游戏化编程轻松掌握代码技能?CodeCombat完全指南

如何通过游戏化编程轻松掌握代码技能&#xff1f;CodeCombat完全指南 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 你是否曾经觉得学习编程就像破解一个复杂密码&#xff0c;枯燥的语法和抽象的…...

oterm 入门指南:如何快速上手基于终端的 Ollama 客户端

oterm 入门指南&#xff1a;如何快速上手基于终端的 Ollama 客户端 【免费下载链接】oterm the terminal client for Ollama 项目地址: https://gitcode.com/gh_mirrors/ot/oterm oterm 是一款功能强大的终端客户端&#xff0c;专为 Ollama 设计&#xff0c;让你在命令行…...

抖音下载器终极教程:3分钟学会免费批量下载视频素材

抖音下载器终极教程&#xff1a;3分钟学会免费批量下载视频素材 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

Windows Cleaner终极秘籍:从根源解决C盘爆红问题的高效实战

Windows Cleaner终极秘籍&#xff1a;从根源解决C盘爆红问题的高效实战 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows系统卡顿、C盘空间告急的红色警告已…...

自动ping值脚本

import subprocess import time import json import reTARGET_IP "改成设备ip" PING_COUNT 1000 TIMEOUT 1000 # ms STUTTER_THRESHOLD 100 # mslatencies [] packet_loss 0 stutter_count 0def ping_once(ip):try:result subprocess.run(["ping"…...

基于海外数据本地化政策的边缘计算网关脱敏架构与Python实战

摘要&#xff1a; 随着储能系统在全球范围的大规模部署&#xff0c;海外监管机构对工业互联网接入层的数据出境合规与隐私审查愈发严厉。忽视边缘端的数据本地化处理不仅会导致并网测试挂科&#xff0c;更可能引发巨额罚款。本文从底层研发架构师视角出发&#xff0c;深度拆解符…...

手把手教你排查RK3568/RV1126相机ISP报错:从‘isp no free cp buffer’到‘CsiFifoOverflow’的实战修复

嵌入式Camera调试实战&#xff1a;从内核日志到硬件时序的深度排错指南 当你在RK3568或RV1126开发板上调试Camera模组时&#xff0c;是否遇到过ISP突然罢工、MIPI频繁报错的困境&#xff1f;那些晦涩的内核日志就像加密电报&#xff0c;而官方文档往往语焉不详。本文将带你深入…...