Apache Flink 社區(qū)正在積極準(zhǔn)備 Flink 2.0,這是自 Flink 1.0 發(fā)布 8 年以來(lái)的首次大版本發(fā)布痘儡。作為一個(gè)重要的里程碑辕万,F(xiàn)link 2.0 將引入許多激動(dòng)人心的功能和改進(jìn),以及一些不兼容的破壞性變更。為了促進(jìn)用戶和上下游項(xiàng)目(例如渐尿,連接器)盡早適配這些變更醉途,提前嘗試這些令人興奮的新功能同時(shí)收集反饋,我們現(xiàn)在提供了 Flink 2.0 的預(yù)覽版本砖茸。
注意: Flink 2.0 預(yù)覽版不是穩(wěn)定版本隘擎,請(qǐng)不要應(yīng)用于生產(chǎn)環(huán)境。雖然這個(gè)預(yù)覽版包含了 Flink 2.0 中絕大部分影響兼容性的變更凉夯,但 2.0 正式版仍可能引入額外的非兼容改動(dòng)货葬。
非兼容變更
API
以下 API 已被完全移除:
DataSet API: 請(qǐng)遷移到 DataStream API, 或 Table API/SQL。 詳見(jiàn) 如何從 DataSet 遷移到 DataStream劲够。
Scala DataStream 和 DataSet API: 請(qǐng)遷移到 Java DataStream API震桶。
SourceFuction, SinkFunction 和 Sink V1: 請(qǐng)遷移到 FLIP-27 Source和 Sink V2。
TableSoure 和 TableSink: 請(qǐng)遷移到 DynamicTableSource和 DynamicTableSink. 詳見(jiàn) User-defined Sources & Sinks征绎。
TableSchema, TableColumn 和 Types: 請(qǐng)分別遷移到 Schema, Column和 DataTypes蹲姐。
同時(shí),DataStream API 以及 REST API 中部分廢棄的方法和字段也已經(jīng)被移除人柿。
注意: 您可能會(huì)發(fā)現(xiàn)一些已移除的 API 仍然存在于代碼庫(kù)中淤堵,但被移動(dòng)到了和原來(lái)不同的包路徑下。它們現(xiàn)在僅供內(nèi)部使用顷扩,并且可能隨時(shí)發(fā)生更改或移除。請(qǐng) 不要再使用 它們.
連接器適配計(jì)劃
由于 SourceFunction, SinkFunction 和 SinkV1 API 被移除慰毅,依賴這些 API 的現(xiàn)有連接器將無(wú)法在 Flink 2.x 版本工作隘截,需要進(jìn)行針對(duì)性適配。以下是具體的適配計(jì)劃:
Flink 2.0 預(yù)覽版發(fā)布后會(huì)盡快發(fā)布與之適配的 Kafka 連接器新版本汹胃。
JDBC 和 ElasticSearch 連接器將在 Flink 2.0 的正式版本中適配婶芭。
我們計(jì)劃在接下來(lái)的 3 個(gè)版本(即截止到 Flink 2.3)中逐步適配剩余的連接器。
配置
符合以下標(biāo)準(zhǔn)的配置項(xiàng)已被移除:
被標(biāo)注為
@Public
并且已棄用至少2個(gè)版本着饥。被標(biāo)注為
@PublicEvolving
并且已棄用至少1個(gè)版本犀农。
在 Flink 2.x 中,不再支持舊的配置文件 flink-conf.yaml
, 請(qǐng)改用符合標(biāo)準(zhǔn) YAML 格式的 config.yaml
宰掉。我們提供了一個(gè)遷移工具呵哨,用于將舊的 flink-conf.yaml
轉(zhuǎn)換為新的 config.yaml
。詳見(jiàn) 從 flink-conf.yaml 遷移到 config.yaml轨奄。
在程序中使用硬編碼的方式進(jìn)行配置會(huì)帶來(lái)諸多弊端孟害,因此 StreamExecutionEnvironment
和 ExecutionConfig
中與配置相關(guān)的 API 不再允許直接傳入 Java 對(duì)象作為參數(shù)。你現(xiàn)在應(yīng)該通過(guò) Configuration
和 ConfigOption
來(lái)進(jìn)行相應(yīng)的配置挪拟。
為了避免暴露過(guò)多的內(nèi)部接口挨务,用戶自定義函數(shù)(UDF) 不再對(duì) ExecutionConfig
具有完整的訪問(wèn)權(quán)限。相應(yīng)地,你現(xiàn)在可以直接從 RuntimeContext
中訪問(wèn)這些必要的函數(shù)谎柄,例如 createSerializer()
, getGlobalJobParameters()
和 isObjectReuseEnabled()
丁侄。
其它
1.x 到 2.x 的升級(jí)不保證 狀態(tài)兼容性。
不再支持 Java 8: Java 11 是目前支持的最低 Java 版本朝巫。
舊的 Hybrid Shuffle 模式 已經(jīng)被完全移除鸿摇。
重要新特性
存算分離狀態(tài)管理
過(guò)去十年間 Flink 的部署模式、工作負(fù)載和硬件的架構(gòu)都發(fā)生了很大的改變捍歪。我們已經(jīng)從計(jì)算-存儲(chǔ)緊密耦合的 map-reduce 時(shí)代户辱,進(jìn)入到了以 Kubernetes 容器化部署為標(biāo)準(zhǔn)的云原生世界。為了 Flink 在云原生時(shí)代的未來(lái)糙臼,我們?cè)?Flink 2.0 中引入了基于遠(yuǎn)程存儲(chǔ)的存算分離狀態(tài)管理庐镐。
存算分離架構(gòu)的引入使得 Flink 向云原生領(lǐng)域更進(jìn)一步。新架構(gòu)主要解決了以下問(wèn)題:
容器化環(huán)境下計(jì)算節(jié)點(diǎn)受本地磁盤大小限制的問(wèn)題
由于RocksDB中LSM結(jié)構(gòu)的周期性 Compaction 導(dǎo)致計(jì)算資源尖峰的問(wèn)題
大規(guī)模狀態(tài)快速擴(kuò)縮容的挑戰(zhàn)
原生的輕量級(jí)和快速檢查點(diǎn)
受限于 Flink 中現(xiàn)有的阻塞式同步執(zhí)行模型变逃,僅僅將狀態(tài)存儲(chǔ)擴(kuò)展到從遠(yuǎn)程 DFS 讀寫(xiě)是不夠的必逆。在 Flink 2.0 中,我們提出了異步執(zhí)行模型揽乱,并為此引入了 ForStDB名眉,這是一種分離的狀態(tài)后端解決方案。
在當(dāng)前預(yù)覽版本下凰棉,我們使用: NexmarkQ20 完成了一個(gè)端到端的示例损拢。 其中包括:
異步化執(zhí)行:完整的狀態(tài)異步訪問(wèn)的API,以及檢查點(diǎn)支持
異步化SQL Join算子:基于異步化狀態(tài) API實(shí)現(xiàn)
同步/異步混合式執(zhí)行:基于混合式SQL Plan撒犀,支持同步算子與異步算子在一個(gè)作業(yè)內(nèi)共存
性能:在直接寫(xiě)入存算分離后的遠(yuǎn)端存儲(chǔ)的場(chǎng)景下福压,提供了不錯(cuò)的性能
物化表
在 Flink 1.20 中,我們以最簡(jiǎn)可行產(chǎn)品(Minimum Viable Product) 的形式引入了物化表功能或舞。物化表是 Flink SQL 中的一種創(chuàng)新型表類型荆姆,旨在進(jìn)一步簡(jiǎn)化流和批作業(yè)的數(shù)據(jù)處理流程,同時(shí)提供統(tǒng)一的開(kāi)發(fā)體驗(yàn)映凳。在即將發(fā)布的 Flink 2.0 中胆筒,我們正在增強(qiáng)物化表所支持的功能,包括與主流的湖格式進(jìn)行集成以及生產(chǎn)就緒的調(diào)度器實(shí)現(xiàn)诈豌。
批作業(yè)的自適應(yīng)執(zhí)行
此外仆救,F(xiàn)link 正在不斷提升其自適應(yīng)批處理能力。即將發(fā)布的 Flink 2.0 將具備基于作業(yè)已完成的階段所提供的信息矫渔,對(duì)邏輯計(jì)劃和物理計(jì)劃進(jìn)行動(dòng)態(tài)優(yōu)化的能力派桩。初步支持的策略包括動(dòng)態(tài)應(yīng)用 Broadcast Join 以及對(duì)數(shù)據(jù)傾斜的 Join 進(jìn)行優(yōu)化。
流式湖倉(cāng)
以 Apache Flink 和 Apache Paimon 的集成為代表的流式湖倉(cāng)架構(gòu)將湖倉(cāng)范式中統(tǒng)一的數(shù)據(jù)存儲(chǔ)蚌斩、開(kāi)放格式和成本效益擴(kuò)展到了實(shí)時(shí)領(lǐng)域铆惑。即將發(fā)布的 Flink 2.0 在 Flink 和 Paimon 的集成方面邁出了重要一步:Flink 和 Paimon 社區(qū)正在密切合作范嘱,充分結(jié)合彼此的優(yōu)勢(shì)以及核心功能,帶來(lái)了諸多重要改進(jìn)员魏,包括但不限于:使用 Paimon 豐富的合并引擎進(jìn)行 SQL 執(zhí)行計(jì)劃優(yōu)化丑蛤、大幅提升 Lookup-Join 的性能、支持 Flink 物化表撕阎、以及對(duì)自適應(yīng)批處理和推測(cè)執(zhí)行的支持受裹。