Apache Flink PMC(項(xiàng)目管理委員)很高興地宣布發(fā)布 Apache Flink 1.19.0。與往常一樣蒂秘,這是一個(gè)充實(shí)的版本褒链,包含了廣泛的改進(jìn)和新功能≈魑。總共有 162 人為此版本做出了貢獻(xiàn)冠息,完成了 33 個(gè) FLIPs、解決了 600 多個(gè)問(wèn)題孕索。感謝各位貢獻(xiàn)者的支持逛艰!
一、Flink SQL 提升
源表自定義并行度
現(xiàn)在搞旭,在 Flink 1.19 中散怖,您可以通過(guò)選 scan.parallelism 設(shè)置自定義并行度,以調(diào)整性能肄渗。第一個(gè)可用的連接器是 DataGen( Kafka 連接器即將推出)镇眷。下面是一個(gè)使用 SQL Client 的示例:
-- set parallelism within the ddl
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3)
) WITH (
'connector' = 'datagen',
'scan.parallelism' = '4'
);
-- or set parallelism via dynamic table option
SELECT * FROM Orders /*+ OPTIONS('scan.parallelism'='4') */;
更多信息
可配置的 SQL Gateway Java 選項(xiàng)
一個(gè)用于指定 Java 選項(xiàng)的新選項(xiàng) env.java.opts.sql-gateway ,這樣你就可以微調(diào)內(nèi)存設(shè)置翎嫡、垃圾回收行為和其他相關(guān) Java 參數(shù)欠动。
更多信息
使用 SQL 提示配置不同的狀態(tài) TTL
從 Flink 1.18 開(kāi)始,Table API 和 SQL 用戶(hù)可以通過(guò) SQL 編譯計(jì)劃為有狀態(tài)操作符單獨(dú)設(shè)置狀態(tài)存續(xù)時(shí)間 ( TTL )惑申。在 Flink 1.19 中具伍,用戶(hù)可以使用 STATE_TTL 提示,以更靈活的方式直接在查詢(xún)中為常規(guī)連接和分組聚合指定自定義 TTL 值圈驼。
這一改進(jìn)意味著您不再需要修改編譯后的計(jì)劃人芽,就能為這些常用操作符設(shè)置特定的 TTL。引入 STATE_TTL 提示后绩脆,您可以簡(jiǎn)化工作流程萤厅,并根據(jù)操作要求動(dòng)態(tài)調(diào)整 TTL。
下面是一個(gè)例子:
-- set state ttl for join
SELECT /*+ STATE_TTL('Orders'= '1d', 'Customers' = '20d') */ *
FROM Orders LEFT OUTER JOIN Customers
ON Orders.o_custkey = Customers.c_custkey;
-- set state ttl for aggregation
SELECT /*+ STATE_TTL('o' = '1d') */ o_orderkey, SUM(o_totalprice) AS revenue
FROM Orders AS o
GROUP BY o_orderkey;
更多信息
函數(shù)和存儲(chǔ)過(guò)程支持命名參數(shù)
現(xiàn)在靴迫,在調(diào)用函數(shù)或存儲(chǔ)過(guò)程時(shí)可以使用命名參數(shù)惕味。使用命名參數(shù)時(shí),用戶(hù)無(wú)需嚴(yán)格指定參數(shù)位置玉锌,只需指定參數(shù)名稱(chēng)及其相應(yīng)值即可名挥。同時(shí),如果沒(méi)有指定非必要參數(shù)芬沉,這些參數(shù)將默認(rèn)為空值躺同。
下面是一個(gè)使用命名參數(shù)定義帶有一個(gè)必選參數(shù)和兩個(gè)可選參數(shù)的函數(shù)的示例:
public static class NamedArgumentsTableFunction extends TableFunction<Object> {
@FunctionHint(
output = @DataTypeHint("STRING"),
arguments = {
@ArgumentHint(name = "in1", isOptional = false, type = @DataTypeHint("STRING")),
@ArgumentHint(name = "in2", isOptional = true, type = @DataTypeHint("STRING")),
@ArgumentHint(name = "in3", isOptional = true, type = @DataTypeHint("STRING"))})
public void eval(String arg1, String arg2, String arg3) {
collect(arg1 + ", " + arg2 + "," + arg3);
}
}
在 SQL 中調(diào)用函數(shù)時(shí),可以通過(guò)名稱(chēng)指定參數(shù)丸逸,例如:
SELECT * FROM TABLE(myFunction(in1 => 'v1', in3 => 'v3', in2 => 'v2'))
可選參數(shù)也可以省略:
SELECT * FROM TABLE(myFunction(in1 => 'v1'))
更多信息
Window TVF 聚合功能
- 支持流模式下的 SESSION Window TVF
現(xiàn)在蹋艺,用戶(hù)可以在流模式下使用 SESSION Window TVF。下面是一個(gè)簡(jiǎn)單的示例:
-- session window with partition keys
SELECT * FROM TABLE(
SESSION(TABLE Bid PARTITION BY item, DESCRIPTOR(bidtime), INTERVAL '5' MINUTES));
-- apply aggregation on the session windowed table with partition keys
SELECT window_start, window_end, item, SUM(price) AS total_price
FROM TABLE(
SESSION(TABLE Bid PARTITION BY item, DESCRIPTOR(bidtime), INTERVAL '5' MINUTES))
GROUP BY item, window_start, window_end;
-
Window TVF 聚合支持處理更新流
窗口聚合運(yùn)算符(基于窗口 TVF 函數(shù)生成)現(xiàn)在可以順利處理更新流(如 CDC 數(shù)據(jù)源等)黄刚。建議用戶(hù)從傳統(tǒng)的 窗口聚合遷移到新語(yǔ)法捎谨,以獲得更全面的功能支持。
更多信息
新的 UDF 類(lèi)型:AsyncScalarFunction
常見(jiàn)的 UDF 類(lèi)型 ScalarFunction 可以很好地處理 CPU 密集型操作憔维,但對(duì)于 IO 密集型或其他長(zhǎng)時(shí)間運(yùn)行的計(jì)算則效果不佳涛救。在 Flink 1.19 中,我們新增了 AsyncScalarFunction 业扒,它是一種用戶(hù)定義的異步 ScalarFunction 检吆,允許異步發(fā)出并發(fā)函數(shù)調(diào)用。
更多信息
Regular Join 支持 MiniBatch 優(yōu)化
消息放大是 Flink 中執(zhí)行級(jí)聯(lián)連接時(shí)的一個(gè)痛點(diǎn)程储,現(xiàn)在在 Flink 1.19 中得到了解決蹭沛,新的 MiniBatch 優(yōu)化可用于 Regular Join,以減少此類(lèi)級(jí)聯(lián)連接場(chǎng)景中的中間結(jié)果章鲤。
更多信息
二摊灭、Runtime & Coordination 提升
批作業(yè)支持源表動(dòng)態(tài)并行度推導(dǎo)
在 Flink 1.19 中,我們支持批作業(yè)的源表動(dòng)態(tài)并行度推導(dǎo)败徊,允許源連接器根據(jù)實(shí)際消耗的數(shù)據(jù)量動(dòng)態(tài)推斷并行度帚呼。
與以前的版本相比,這一功能有了重大改進(jìn)皱蹦,以前的版本只能為源節(jié)點(diǎn)分配固定的默認(rèn)并行度煤杀。
源連接器需要實(shí)現(xiàn)推理接口,以啟用動(dòng)態(tài)并行度推理根欧。目前怜珍,F(xiàn)ileSource 連接器已經(jīng)開(kāi)發(fā)出了這一功能。
此外凤粗,配置 execution.batch.adaptive.auto-parallelism.default-source-parallelism 將被用作源并行度推理的上限∷址海現(xiàn)在,它不會(huì)默認(rèn)為 1嫌拣。取而代之的是柔袁,如果沒(méi)有設(shè)置,將使用通過(guò)配置 execution.batch.adaptive.auto-parallelism.max-parallelism 設(shè)置的允許并行度上限异逐。如果該配置也未設(shè)置捶索,則將使用默認(rèn)的并行度設(shè)置 parallelism.default 或 StreamExecutionEnvironment#setParallelism() 。
更多信息
Flink Configuration 支持標(biāo)準(zhǔn) YAML 格式
從 Flink 1.19 開(kāi)始灰瞻,F(xiàn)link 正式全面支持標(biāo)準(zhǔn) YAML 1.2 語(yǔ)法腥例。默認(rèn)配置文件已改為 config.yaml 辅甥,放置在 conf/directory 中。如果用戶(hù)想使用傳統(tǒng)的配置文件 flink-conf.yaml 燎竖,只需將該文件復(fù)制到 conf/directory 中即可璃弄。一旦檢測(cè)到傳統(tǒng)配置文件 flink-conf.yml ,F(xiàn)link 就會(huì)優(yōu)先使用它作為配置文件构回。而在即將推出的 Flink 2.0 中夏块, flink-conf.yaml 配置文件將不再起作用。
更多信息
在 Flink Web 上 Profiling JobManager/TaskManager
在 Flink 1.19 中纤掸,我們支持在 JobManager/TaskManager 級(jí)別觸發(fā) Profile脐供,允許用戶(hù)創(chuàng)建具有任意時(shí)間間隔和事件模式(由 async-profiler 支持)的 Profile 實(shí)例。用戶(hù)可以在 Flink Web UI 中輕松提交剖析并導(dǎo)出結(jié)果借跪。
例如政己,用戶(hù)只需在確定存在性能瓶頸的候選任 JobManager/TaskManager 后,通過(guò) "Create Profiling [圖片上傳中...(3.png-a8c14e-1710817059321-0)]
Instance" 提交一個(gè)具有指定周期和模式的 Profile 實(shí)例:
Profile 結(jié)果:
更多信息
新增管理員 JVM 選項(xiàng)配置選項(xiàng)
有一組管理員 JVM 選項(xiàng)可供使用掏愁,它們是用戶(hù)設(shè)置的額外 JVM 選項(xiàng)的前綴匹颤,用于全平臺(tái)范圍的 JVM 調(diào)整。
更多信息
三托猩、Checkpoints 提升
Source 反壓時(shí)支持使用更大的 Checkpointing 間隔
引入 ProcessingBacklog 的目的是為了說(shuō)明處理記錄時(shí)應(yīng)采用低延遲還是高吞吐量印蓖。ProcessingBacklog 可由 Source 算子設(shè)置,并可用于在運(yùn)行時(shí)更改作業(yè)的檢查點(diǎn)間隔京腥。
更多信息
CheckpointsCleaner 并行清理單個(gè)檢查點(diǎn)狀態(tài)
現(xiàn)在赦肃,在處置不再需要的檢查點(diǎn)時(shí),ioExecutor 會(huì)并行處置每個(gè)狀態(tài)句柄/狀態(tài)文件公浪,從而大大提高了處置單個(gè)檢查點(diǎn)的速度(對(duì)于大型檢查點(diǎn)他宛,處置時(shí)間可從 10 分鐘縮短至 < 1 分鐘)∏菲可以通過(guò)設(shè)置為 false 恢復(fù)舊版本的行為厅各。
更多信息
通過(guò)命令行客戶(hù)端觸發(fā) Checkpoints
命令行界面支持手動(dòng)觸發(fā)檢查點(diǎn)。
使用方法:
./bin/flink checkpoint $JOB_ID [-full]
如果指定"-full "選項(xiàng)预柒,就會(huì)觸發(fā)完全檢查點(diǎn)队塘。否則猖凛,如果作業(yè)配置為定期進(jìn)行增量檢查點(diǎn)巩剖,則會(huì)觸發(fā)增量檢查點(diǎn)。
更多信息
四鲜滩、Connector API提升
與 Source API 一致的 SinkV2 新接口
在 Flink 1.19 中淋袖,SinkV2 API 做了一些修改鸿市,以便與 Source API 保持一致。以下接口已被棄用: TwoPhaseCommittingSink、StatefulSink 焰情、WithPreWriteTopology陌凳、WithPreCommitTopology、WithPostCommitTopology 内舟。引入了以下新接口 CommitterInitContext 冯遂、CommittingSinkWriter 、 WriterInitContext 谒获、StatefulSinkWrite。更改了以下接口方法的參數(shù): Sink#createWriter 壁却。 在 1.19 版本發(fā)布期間批狱,原有接口仍將可用,但會(huì)在后續(xù)版本中移除展东。
更多信息
用于跟蹤 Committables 狀態(tài)的新 Committer 指標(biāo)
修改了 TwoPhaseCommittingSink#createCommitter 方法的參數(shù)化赔硫,新增了 CommitterInitContext 參數(shù)。原來(lái)的方法在 1.19 版本發(fā)布期間仍然可用盐肃,但會(huì)在后續(xù)版本中移除爪膊。
更多信息
五、重要API棄用
為了給 Flink 2.0 版本做準(zhǔn)備砸王,社區(qū)決定正式廢棄多個(gè)已接近生命周期終點(diǎn)的 API推盛。
Flink's org.apache.flink.api.common.time.Time 現(xiàn)已被正式棄用,并將在 Flink 2.0 中刪除谦铃。引入了支持 Duration 類(lèi)的方法耘成,以取代已廢棄的基于 Time 的方法。
org.apache.flink.runtime.jobgraph.RestoreMode#LEGACY 已被棄用驹闰。請(qǐng)使用 RestoreMode#CLAIM 或 RestoreMode#NO_CLAIM 模式瘪菌,以在還原時(shí)獲得清晰的狀態(tài)文件所有權(quán)。
舊的解決模式兼容性的方法已被棄用嘹朗,請(qǐng)參考遷移說(shuō)明遷移至新方法: Migrating from deprecated TypeSerializerSnapshot#resolveSchemaCompatibility(TypeSerializer newSerializer) before Flink 1.19.
通過(guò)硬代碼配置序列化行為已被棄用师妙,例如 ExecutionConfig#enableForceKryo。請(qǐng)使用選 pipeline.serialization-config 屹培、pipeline.force-avr 默穴、pipeline.force-kryo 和 pipeline.generic-types。實(shí)例級(jí)序列化器的注冊(cè)已被棄用褪秀,請(qǐng)使用類(lèi)級(jí)序列化器壁顶。
除了 getString(String key, String defaultValue) 和 setString(String key, String value),我們已廢棄所有 setXxx 和 getXxx 方法溜歪,如:setInteger 若专、setLong 、getInteger 和 getLong 等蝴猪。 建議用戶(hù)和開(kāi)發(fā)人員使用以 ConfigOption 代替字符串作為鍵的 get 和 set 方法调衰。
StreamExecutionEnvironment 膊爪、CheckpointConfig 和 ExecutionConfig 中的非 ConfigOption 對(duì)象及其相應(yīng)的 getter/setter 接口現(xiàn)已廢棄。這些對(duì)象和方法計(jì)劃在 Flink 2.0 中刪除嚎莉。已廢棄的接口包括重啟策略( RestartStrategy )米酬、檢查點(diǎn)存儲(chǔ)( CheckpointStorage )和狀態(tài)后端( StateBackend )的getter 和 setter 方法。
org.apache.flink.api.common.functions.RuntimeContext#getExecutionConfig 現(xiàn)已被正式棄用趋箩,并將在 Flink 2.0 中刪除赃额。請(qǐng)使用 getGlobalJobParameters() 或 isObjectReuseEnabled()。
org.apache.flink.api.common.functions.RichFunction#open(Configuration parameters) 方法已被棄用叫确,并將在未來(lái)版本中刪除跳芳。我們鼓勵(lì)用戶(hù)遷移到新的RichFunction#open(OpenContext openContext)。
org.apache.flink.configuration.AkkaOptions 已被棄用竹勉,取而代之的是 RpcOptions 飞盆。
六、升級(jí)說(shuō)明
Apache Flink 社區(qū)努力確保升級(jí)過(guò)程盡可能平穩(wěn), 但是升級(jí)到 1.19 版本可能需要用戶(hù)對(duì)現(xiàn)有應(yīng)用程序做出一些調(diào)整次乓。請(qǐng)參考 Release Notes 獲取更多的升級(jí)時(shí)需要的改動(dòng)與可能的問(wèn)題列表細(xì)節(jié)吓歇。