為什么 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的穩定性、可移植性、生態系統、社區活躍度等方面的綜合考量

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167803.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167803.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167803.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

國家開放大學的學子們 練習題 走起!

試卷代號:1356 高級英語聽說(2) 參考 試題 Section One (20 points, 2 points each) Directions: Listen to the conversation and fill in the blanks with the words you hear. Write the words on the Answer Sheet The conversation will be read TWICE. M…

windows11上安裝WSL

Windows電腦上要配置linux(這里指ubuntu)開發環境,主要有三種方式: 1)在windows上裝個虛擬機(比如vmware)。缺點是vmware加載ubuntu后系統會變慢很多,而且需要通過samba來實現window…

使用Java連接Hbase

我在網上試 了很多代碼,但是大部分都不能實現,Java連接Hbase,一直報一個錯 java.util.concurrent.ExecutionException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode NoNode for /hbase/hbaseid一直也不清楚為什…

計算機組成原理。3-408

1.動態存儲和靜態存儲 2.雙端口RAM 注意:cpu通過地址線和數據線讀寫數據時,不能同時寫,但可以同時讀,也不能一邊讀一邊寫。 3.多體并行存儲器 分為高位存儲和低位存儲 小結 4.磁盤存儲器的組成 5.磁盤的性能指標 磁盤讀寫尋道…

如何對網站進行滲透測試

信息搜集 信息搜集拿到域名后獲取真實IP,如果存在CDN想辦法繞過端口掃描,針對開放的端口在獲取客戶同意的前提下進行爆破查找網站子域名,后臺目錄判斷網站的CMS 可以使用 Wappalyzer插件 whatcms 是一個可以用來確定特定網站正在使用的什么…

Vue中Slot的使用指南

目錄 前言 什么是slot? 單個slot的使用 具名slot的使用 作用域插槽 總結 前言 在Vue中,slot是一種非常強大和靈活的功能,它允許你在組件模板中預留出一個或多個"插槽",然后在使用這個組件的時候動態地填充內容。這…

TSINGSEE青犀智能分析網關道路積水識別AI算法方案

在各處的街道、路口等區域,及時發現道路積水問題,可以大大減少城市管理部門壓力,及時處理,減少交通事故與人員摔倒事故。通過道路積水AI算法,能有效提高城市管理部門效率,優化城市管理方式。 那么&#xff…

【Web】PhpBypassTrick相關例題wp

目錄 ①[NSSCTF 2022 Spring Recruit]babyphp ②[鶴城杯 2021]Middle magic ③[WUSTCTF 2020]樸實無華 ④[SWPUCTF 2022 新生賽]funny_php 明天中期考,先整理些小知識點冷靜一下 ①[NSSCTF 2022 Spring Recruit]babyphp payload: a[]1&b1[]1&b2[]2&…

NLP的使用

參考: Apache openNLP 簡介 - 鏈滴 (ld246.com) opennlp 模型下載地址:Index of /apache/opennlp/models/ud-models-1.0/ (tencent.com) OpenNLP是一個流行的開源自然語言處理工具包,它提供了一系列的NLP模型和算法。然而,Open…

【模擬開關CH440R】2022-1-20

資料模擬開關CH440芯片手冊 - 百度文庫 ch440R回來了,導通usb設備沒問題,降壓不影響。但是我發現個嚴重的問題,我的電路是直接通過4067控制ch440r接地,低電平,使能三個線路連一起的,郵箱的圖您看看&#xf…

N-134基于java實現捕魚達人游戲

開發工具eclipse,jdk1.8 文檔截圖&#xff1a; package com.qd.fish;import java.awt.Graphics; import java.io.File; import java.util.ArrayList; import java.util.List;import javax.imageio.ImageIO;public class Fishes {//定義一個集合來管理魚List<Fish> fish…

五種多目標優化算法(NSDBO、NSGA3、MOGWO、NSWOA、MOPSO)求解微電網多目標優化調度(MATLAB代碼)

一、多目標優化算法簡介 &#xff08;1&#xff09;非支配排序的蜣螂優化算法NSDBO 多目標應用&#xff1a;基于非支配排序的蜣螂優化算法NSDBO求解微電網多目標優化調度&#xff08;MATLAB&#xff09;-CSDN博客 &#xff08;2&#xff09;NSGA3 NSGA-III求解微電網多目標…

應用場景丨社區燃氣管網監測系統建設

燃氣作為現代社會的重要能源&#xff0c;燃氣被廣泛應用于居民生活、工業生產、商業服務等領域。然而&#xff0c;燃氣泄漏事故時有發生&#xff0c;不僅給人們的生命財產安全帶來嚴重威脅&#xff0c;也給燃氣行業的發展帶來不良影響。因此&#xff0c;對于燃氣管道的監測和管…

給虛擬機配置靜態id地址

1.令人頭大的原因 當連接虛擬機的時候 地址不一會就改變&#xff0c;每次都要重新輸入 2.配置虛擬機靜態id地址 打開命令窗口執行 : vim /etc/sysconfig/network-scripts/ifcfg-ens33 按下面操作修改 查看自己子網掩碼 3.重啟網絡 命令行輸入 systemctl restart netwo…

【C語言】函數(四):函數遞歸與迭代,二者有什么區別

目錄 前言遞歸定義遞歸的兩個必要條件接受一個整型值&#xff08;無符號&#xff09;&#xff0c;按照順序打印它的每一位使用函數不允許創建臨時變量&#xff0c;求字符串“abcd”的長度求n的階乘求第n個斐波那契數 迭代總結遞歸與迭代的主要區別用法不同結構不同時間開銷不同…

容器args中使用環境變量

1 背景 有時候需將變量傳給容器&#xff0c;作為命令的參數。比如定義一個branch name&#xff0c;然后在initcontainer中clone對應的配置&#xff0c;進行后續操作。這時候我們就可以通過ConfigMap來保存這個值&#xff0c;然后在Deployment里讀取這個ConfigMap&#xff0c;并…

毛利率創歷史新高,三季度的小米拿出“新王牌”?

近日&#xff0c;小米正式發布了今年三季度的財報。財報數據顯示&#xff0c;小米第三季度經調整凈利潤為59.9億元人民幣&#xff0c;同比增長182.9%&#xff0c;遠超市場預期的48億元。這其中&#xff0c;手機業務作為小米的基本盤一直是市場的關注焦點。今年三季度&#xff0…

Python----函數的參數

在函數定義與調用時&#xff0c;我們可以根據自己的需求來實現參數的傳遞。在Python中&#xff0c;函數的參數一共有兩種形式&#xff1a;① 形參 ② 實參 形參&#xff1a;在函數定義時&#xff0c;所編寫的參數就稱之為形式參數 實參&#xff1a;在函數調用時&#xff0c;所…

vue3的基本使用(超詳細)

一、初識vue3 1.vue3簡介 2020年9月18日&#xff0c;vue3發布3.0版本&#xff0c;代號大海賊時代來臨&#xff0c;One Piece特點&#xff1a; 無需構建步驟&#xff0c;漸進式增強靜態的 HTML在任何頁面中作為 Web Components 嵌入單頁應用 (SPA)全棧 / 服務端渲染 (SSR)Jams…

大表添加字段不停服思路

前言 這個是源自于昨天寫的業務背景&#xff0c;對接蘋果支付退款退單接口-CSDN博客 涉及到了order表的改動&#xff0c;而目前order表已經有2千萬的數據&#xff0c;如果退款字段都直接加在這張表里面可能會比較慢&#xff0c;所以才有這篇文章&#xff0c;文章里只討論思路&a…