大數據

Flink Weekly | 每週社區動態更新-20200429

大家好,本文為 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.html

2.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.html

3.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.html

4.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 中文郵件列表訂閱流程:

  1. 發送任意郵件到 [email protected]
  2. 收到官方確認郵件
  3. 回覆該郵件 confirm 即可訂閱

訂閱成功後將收到 Flink 官方的中文郵件列表的消息,您可以向 [email protected] 發郵件提問也可以幫助別人解答問題,動動手測試一下!

Flink Weekly 週報計劃每週更新一期,內容涵蓋郵件列表中用戶問題的解答、社區開發和提議的進展、社區新聞以及其他活動、博客文章等,歡迎持續關注。

作者介紹:

李本超,碩士畢業於北京大學,現就職於字節跳動基礎架構流式計算工程師。

Leave a Reply

Your email address will not be published. Required fields are marked *