曾經(jīng)紅遍一時的Scala
想當初Spark橫空出世之后,Scala簡直就是語言界的一顆璀璨新星,惹得大家紛紛側(cè)目,連Kafka這類技術(shù)框架也選擇用Scala語言進行開發(fā)重構(gòu)。
可如今,F(xiàn)link竟然公開宣布棄用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的文檔,其中內(nèi)容如下。
Flink通過APIs方式來構(gòu)建DataStream和TableAPI程序。這些是用Java和Scala寫的。PythonAPI在底層使用JavaAPI。隨著時間的推移,F(xiàn)link社區(qū)的主要焦點已經(jīng)轉(zhuǎn)向JavaAPI,而Flink中的Scala支持與JavaAPI并不同步。舉幾個例子:
Flink仍然僅支持Scala2.12.7,如果要升級的畫,只能通過破壞兼容性升級到更高版本
截止到目前為止,F(xiàn)link還不支持Scala2.13
與Scala中的DataStreamAPI 相比,Java中的DataStreamAPI具有更多可用功能。例如Async I/O
Flink中Scala現(xiàn)狀可以總結(jié)為( 機翻 ):
大多數(shù)與Scala相關(guān)的貢獻都集中在阻止用戶在任何Scala版本中使用JavaAPI
Flink社區(qū)缺乏具有Scala知識的維護人員,可以幫助直接在Flink中轉(zhuǎn)發(fā)Scala支持
添加到Flink的新API接口首先是為Java創(chuàng)建的,在Scala中沒有或只有有限的支持
開源社區(qū)正在制定舉措來幫助Flink中的Scala支持,例如https://github.com/ariskk/flink4s(為Scala3用戶包裝JavaAPI)和https://github.com/findify/flink-adt(取代了flink-scala 中的TypeInformation派生機制)
至于Scala版本之間的兼容性為何總是那么差,其實很簡單:
當年Scala剛創(chuàng)出個頭角時,并未面臨著保持兼容性的壓力,因為那時的它并不吃香,也未受到大型企業(yè)的青睞。正是這種無人關(guān)注的狀態(tài),使得維持兼容性變得無所謂。直至Scala 2.7.x版本前后,它開始呈現(xiàn)出崛起之勢,一些新興企業(yè),比如Twitter,紛紛將其作為首選,由此一來,向后兼容性才成了頭等大事。
在Scala 2.8.0開始起航之時,該語言引入了一套特殊規(guī)則以最大程度上保持兼容性。對于Scala2來說,版本劃分更為明確:2.major.minor,只要主版本保持不變,次要版本之間就能做到完美兼容。主版本的跨越往往會破壞二進制兼容性,也就意味著編譯生成的目標代碼可能存在差異。
我曾與業(yè)界大佬咨詢過這個問題,他的回答是:主版本跨度導致二進制兼容性遭受破壞的根本原因在于,JVM字節(jié)碼并不是特別為Scala而生的,而是專為Java量身定做。當Scala引入新的特性時,JVM并不會主動調(diào)整以支持這些新功能,因此Scala必須在編譯器生成的字節(jié)碼中實現(xiàn),
另外,當呼聲極高的Java8集錦登場之際,Java和JVM攜手新增了諸多新功能,這些新功能需要改變 Scala的執(zhí)行機制,以便更好地與Java8代碼相互融合,這也破壞了二進制兼容性。
但Scala3將引入一個特定的Scala的中間“字節(jié)碼”,這將允許不同的版本保持彼此的兼容性。
破案
Flink拋棄Scala的主要原因是因為,社區(qū)缺少Scala相關(guān)的人員,并且新的Api都是Java的,另外因為兼容性問題,Scala和JavaApi的發(fā)展并不同步。綜上,F(xiàn)link拋棄Scala文章來源:http://www.zghlxwxcb.cn/news/detail-759131.html
為什么選擇Java作為Apache Flink的首選API
選擇Java作為Apache Flink的首選API,是因為Java提供了一個穩(wěn)定可靠的平臺,適合大規(guī)模的計算和流處理。Java擁有豐富的庫和工具,可以幫助開發(fā)者更高效地實現(xiàn)各種計算邏輯。此外,Java的生態(tài)系統(tǒng)也非常龐大,包含了很多優(yōu)秀的工具和庫,使開發(fā)者能夠更輕松地開發(fā)和維護Flink應用。Java的可移植性和跨平臺性也是其受歡迎的原因之一。無論開發(fā)者身處何地,他們都可以使用Java開發(fā)Flink應用,并且在不同的平臺上進行部署和運行。另外,Java社區(qū)的活躍程度也是不容忽視的,Java的開發(fā)者群體龐大且經(jīng)驗豐富,他們可以為Flink提供寶貴的支持和指導,從而幫助用戶更好地使用和優(yōu)化Flink的功能。總的來說,Apache Flink選擇使用Java API,是基于Java的穩(wěn)定性、可移植性、生態(tài)系統(tǒng)、社區(qū)活躍度等方面的綜合考量文章來源地址http://www.zghlxwxcb.cn/news/detail-759131.html
到了這里,關(guān)于為什么 Flink 拋棄了 Scala的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!