大家好,本文為 Flink Weekly 的第十四期,由李本超整理,伍翀 Review。本期主要内容包括:近期社群開發進展、郵件問題答疑、Flink 最新社群動态及技術文章推薦等。
Flink 開發進展
1.Release
■ Dian Fu 宣布 1.9.3 釋出。
[1]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-Apache-Flink-1-9-3-released-td40730.html■ Yu Li 發起了 1.10.1 RC1 的投票。
[2]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-Release-1-10-1-release-candidate-1-td40724.html■ Piotr Nowojski 和 Zhijiang 同步了一下 1.11 的開發進度。
[3]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-Development-progress-of-Apache-Flink-1-11-td40718.html2.FLIP
■ [table api] Xuannan Su 發起了 “FLIP-36 - 在 Flink Table API 中支援互動式程式設計” 的讨論,Becket Qin 回報了一些意見并進行了讨論。
[4]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-36-Support-Interactive-Programming-in-Flink-Table-API-td40592.html■ [table api] Dawid 發起了 FLIP-124 的投票,FLIP-124 旨在增強(反)序列化接口,增加 open/close 接口、支援傳回多條資料等,投票已經通過。
[5]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-124-Add-open-close-and-Collector-to-De-SerializationSchema-td40318.html■ [table api] Aljoscha 發起了 FLIP-126 的讨論,旨在簡化 watermark 生成的邏輯,減少代碼重複,并且能夠做到 per partition 的 idle 檢測。Timo 認為這是個比較有用的 feature。
[6]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-126-Unify-and-separate-Watermark-Assigners-td40525.html■ [runtime] Yangze Guo 宣布 FLIP-118 投票通過,FLIP-118 旨在提升 Flink 内部的 ID 的可讀性。
[7]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/RESULT-VOTE-FLIP-118-Improve-Flink-s-ID-System-td40553.html3.Discuss
■ [doc] David Anderson 發起了将
http://training.ververica.com的一些教育訓練材料貢獻到 Flink 社群的讨論,讨論通過,并且會将這些教育訓練材料放到
https://github.com/apache/flink-training,并且在 Jira 中建立了一個“Documentation / Training”的 component。
[8]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Integration-of-training-materials-into-Apache-Flink-td40299.html■ [SQL] Konstantin 發起了用 DDL 支援定義 Temporal Table Function 的讨論,大家比較認可這個需求,但是對于具體支援的方式發起了讨論,暫時還沒有完全确定用哪種 DDL 方式來做。
[9]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLINK-16824-Creating-Temporal-Table-Function-via-DDL-td40333.html■ [develop] Stephan Ewen 發起了将 1.11 Feature Freeze 的時間延長半個月的讨論,大家都比較贊成,目前定于 5 月中旬為最終 Feature Freeze 的時間。
[10]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Exact-feature-freeze-date-td40624.html■ [state] Stephan Ewen 發起了删除 state 中過時的方法的讨論,大家也都比較贊成,會在 1.11 中删除 state 中标記為過時的那些方法。
[11]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Removing-deprecated-state-methods-in-1-11-td40651.html■ [docker] Chesnay Schepler 發起了将 docker 的開發放到每個 Flink 版本的釋出的讨論,David 認為可以這樣做:
[12]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Move-docker-development-into-versioned-branches-td40646.html■ [runtime] Robert Metzger 發起了支援 Hadoop 3 以及删除 flink-shaded-hadoop 的讨論,大家比較支援這個提議,但是提出了一些潛在的問題,并進行了讨論。
[13]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Adding-support-for-Hadoop-3-and-removing-flink-shaded-hadoop-td40570.html■ [docker] Ismaël Mejía 發起了是否可以在 Flink 正式 release 之外釋出 docker 鏡像的讨論,Chesnay Schepler 認為可以釋出,但是每次釋出都需要有一個正式的釋出流程。
[14]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Intermediary-releases-of-the-flink-docker-images-td40602.html■ [develop] Yangze Guo 發起了關于帶有 max/min 的配置的名字的讨論,目前多數人傾向于使用 XXX.max/XXX.min 這種形式。
[15]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Should-max-min-be-part-of-the-hierarchy-of-config-option-td40578.html4.Other
■ [annonce] Hequn Cheng 成為 Flink PMC 成員。恭喜軍長~
[16]
http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-New-Apache-Flink-PMC-Member-Hequn-Chen-td40374.html郵件問題答疑
■ Matyas 提問:如何在 query 或者 view 上定義 watermark。Jark 回答了他的問題,可以使用在 1.11 中的 LIKE 文法來在已有的 Table 上添加 watermark 定義;也可以用 Table API 将 Table 轉成 DataStream,然後用 assignTimestampAndWatermark 來重新定義 watermark。
[17]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/define-WATERMARKS-in-queries-views-td34610.html■ Lasse Nedergaard 提問:更新到 1.10 之後容易出現 OOM 的問題。Xintong 和 Stephan 進行了解答,可能是因為 native memory 使用的比較多導緻的。Zhhid Rahman 也幫忙回答了一下問題,貼了一下 Youtube 連結的視訊,但是 Stephan 不是很建議這樣子來幫助使用者解決問題。
[18]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Flink-1-10-Out-of-memory-td34406.html■ Oleg Vysotsky 提問:為什麼時候 Kafka Source 的 checkpoint size 會到55GB。Yun Tang 對問題進行了解答,最後定位是因為使用者在切換 Kafka 和 Kinesis Source 的時候,用了同一個 UUID,導緻 Source Operator 的 state 變大,隻要是在切換 Source 的時候用不同的 UUID,就不會出現這個問題。
[19]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Checkpoints-for-kafka-source-sometimes-get-55-GB-size-instead-of-2-MB-and-flink-job-fails-during-rest-td34312.html■ Utopia 提問:關于日志裡彙報”類構造器沒有預設的構造函數,是以不能用作 POJO 類型,隻能用 GenericType 來處理”的資訊。他用的是 Scala 的 case class。Timo 進行了解答,他應該是在 Java API 中使用了 Scala 的 case class,如果是用 Scala API 就不應該會有這個問題。
[20]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Question-about-Scala-Case-Class-and-List-in-Flink-td32139.html■ Eyal Peer 提問:在使用 StreamingFileSink+local filesystem 的時候,在任務重新開機的時候無法恢複的問題。Dawid 進行了解答,認為這是一種不正确的使用方式,這個是沒法做到真正的 Exactly-Once 的,因為 Flink 重新開機的時候任務不會保證排程到之前同樣的 slot 裡,是以沒法恢複。需要使用分布式檔案系統,例如 HDFS 等。
[21]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Fault-tolerance-in-Flink-file-Sink-td34613.html■ Lu Niu 提問:checkpoint 寫入 S3AFileSystem 檔案系統的時候報錯。Congxian 和 Robert 認為這個應該是檔案系統本身的問題,不是 Flink 的問題。并且認為 presto s3 filesystem 是比較推薦的方式,并且建了一個 Jira 來跟蹤 StreamingFileSink 支援 presto s3 filesystem。
[22]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Checkpoint-Error-Because-quot-Could-not-find-any-valid-local-directory-for-s3ablock-0001-quot-td34138.html■ Vinay Patil 提問:如何避免兩個流 Join 的時候發出重複的結果。Konstantin 認為他可以使用 Temporal Table Function 的方式來做 Join,這樣可以避免重複輸出的問題,但是如果用的是事件時間,并且一個流的輸入很低頻,會導緻 watermark 前進的慢,輸出有很大的延遲。使用者最後選擇自己用 DataStream API 自己去實作這個功能了。
[23]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Handling-stale-data-enrichment-td34617.html■ Flavio 提問:是否有方法可以用參數來指定讀取 jdbc 的時候的并行讀取方式。Jingsong 對此進行了回複并進行了讨論,認為這是個合理的場景,filter 下推跟這個需求并不沖突,filter 下推隻能降低從 source 讀取的資料量,但是沒法定制并行讀取的方法。Flavio 建了三個 Jira issue 來跟蹤這個問題。
[24]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/JDBC-Table-and-parameters-provider-td34544.html■ Benchao Li 提問:是否有計劃支援 batch range sort 的計劃,Jingsong 進行了回答。目前還缺少比較明确的應用場景來推動這個 feature 的落地。暫時先建了 Jira issue 來跟蹤這件事。
[25]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/batch-range-sort-support-td34600.html■ liujianggang 提問:使用 UDAF 的時候遇到 checkpoint 的時候會有序列化的問題。這個問題是由于在 serializer.duplicate 中有 bug 導緻的,已經在 FLINK-16242 中修複。
[26]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Blink-SQL-java-lang-ArrayIndexOutOfBoundsException-td34467.html■ seeksst 提問:更新到 1.10 後 JSON_VALUE 函數不能注冊的問題,Jark 和 Danny 進行了回答,是因為在 Calcite 中 JSON_VALUE 是直接 hard code 在 parser 中的,使用者是無法注冊一個同名函數來覆寫掉的,這個已經由 Danny 在 Calcite 社群去 push 解決了。
[27]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Flink-upgrade-to-1-10-function-td34366.html■ Gyula 提問:為什麼 Kafka Join Hive 的時候為什麼不能保留 Kafka 流的時間屬性。Kurt 和 Timo 對此進行了回答,因為現在還沒有辦法在 streaming 模式下區分一個 source 是否是 bounded,而且 join 的時候可能會有 join 到一個比較老的資料的情況,是以目前不能有時間屬性參與 regular join。
[28]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Joining-table-with-row-attribute-against-an-enrichment-table-td34464.html■ dingxingxing 提問:為什麼兩層 group by 的時候,輸出的結果會忽大忽小。Benchao Li 對此進行了回答,因為 group by 會輸出 retract 結果,是以如果是兩層的話,就會導緻下遊的 group by 會放大這個 retract 的影響,導緻會短暫輸出老的結果。Jark 認為可以用 mini batch 來緩解一下這個問題。
[29]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Flink-streaming-sql-group-by-td34412.html■ lec ssmi 提問:關于 Flink SQL 中的 retract 機制,Benchao Li 對 retract 機制進行了解答。目前官方文檔中的确是缺少這塊内容的介紹,已經建立了一個 Jira issue FLINK-17343 來跟蹤這個事情。
[30]
http://apache-flink.147419.n8.nabble.com/retract-td2672.html■ 宇張提問:為什麼找不到正确的 SourceTableFactory,Jingsong 和 tison 進行了解答,原因是現在 TableFactory 是采用 SPI 加載的,這就涉及到使用者在打包的時候,是否把正确的 SPI 配置檔案打包、是否處理好了多個 TableFactory 的時候的沖突問題。這個一般在打 shade 包的時候,需要特殊配置一下 shade 插件,使用起來不是特别友好。
[31]
http://apache-flink.147419.n8.nabble.com/Flink1-10-Standalone-td2650.html■ 酷酷的混蛋提問:關于 Flink SQL 中的 state 的 TTL 的處理的原理,Benchao Li 進行了解答。在之前的确是有些設定不合理,首先在 1.9.3 之前沒有開啟 state 的 background 清理,可能會導緻有些 state 到期了仍然沒有被清理,這個會在 1.9.3 以及 1.10 以後可以解決;第二個問題是之前使用的過期政策是允許讀到過期但是沒有清理的資料,這個行為會在 1.11 中修改成不允許讀到過期的資料的政策。
[32]
http://apache-flink.147419.n8.nabble.com/TTL-td2482.html活動 / 部落格文章 / 其他
■ 1.10 中記憶體管理的改進
[33]
https://flink.apache.org/news/2020/04/21/memory-management-improvements-flink-1.10.html■ Flink 序列化調優(一):如何選擇 Serializer
[34]
https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html■ Stateful Functions 在有狀态的無服務應用中的使用
[35]
https://www.ververica.com/blog/session-preview-stateful-functions-for-stateful-serverless-applications■ Adobe 基于Flink實作實時身份圖譜
[36]
https://www.ververica.com/blog/adobe-realtime-identity-graph-with-flink■ Flink 消息聚合處理方案-微網誌
[37]
https://ververica.cn/corporate_practice/flink-message-aggregation-processing-scheme/2 分鐘快速訂閱 Flink 中文郵件清單
Apache Flink 中文郵件清單訂閱流程:
- 發送任意郵件到 [email protected]
- 收到官方确認郵件
- 回複該郵件 confirm 即可訂閱
訂閱成功後将收到 Flink 官方的中文郵件清單的消息,您可以向 [email protected] 發郵件提問也可以幫助别人解答問題,動動手測試一下!
Flink Weekly 周報計劃每周更新一期,内容涵蓋郵件清單中使用者問題的解答、社群開發和提議的進展、社群新聞以及其他活動、部落格文章等,歡迎持續關注。
作者介紹:
李本超,碩士畢業于北京大學,現就職于位元組跳動基礎架構流式計算工程師。