這是一篇匯總和個人學習文章,主要目的是總結一下Paimon在各大公司的落地做一個學習筆記。
本文的主要內容是關于Paimon在各大公司包括Vivo、Shopee、阿里、抖音等公司的落地實踐,文末有文章來源地址,內容大概分為幾個部分:
1.引入Paimon的背景和主要解決的問題
2.解決方案細節和基本架構
3.核心優化點
引入Paimon的背景和主要解決的問題
離線時效性問題
從各家公司分享的內部應用來看,大多數場景都是Lambda架構同時存在。離線批處理架構最大的問題是存儲和時效,存儲上Hive本身能力有限,大部分場景是insert overwrite,并且基本不關心文件組織形式。
Paimon為代表的湖框架可以精細管理每一個文件,除了簡單的insert overwrite,具備比較強大的ACID能力,能夠流式寫入實現分鐘級更新。
實時鏈路問題
以Flink+MQ為主的實時鏈路,主要的問題包括:
?成本較高,Flink周邊技術棧眾多,管理和運維成本高;并且因為中間結果不落地,需要大量的dump任務輔助進行問題定位和數據修復;
?任務穩定性,有狀態的計算導致延遲等各種問題;
?中間結果不落地,需要大量的輔助任務協助排查問題。
所以我們可以定性的給Paimon解決的問題下一個結論:統一流批鏈路,提升時效的同時降低成本。
核心場景和解決方案
數據統一入湖
在各大公司的分享中,都提到了關于使用Paimon代替傳統的Hive ODS層,將Paimon作為整個業務數據庫的統一鏡像表,提高數據鏈路的時效性并優化存儲空間。
實際生產鏈路帶來的好處如下:
?在傳統離線和實時鏈路中,ODS分別由Hive表和MQ(一般是Kafka)來承載,在新鏈路中Paimon表作為ODS的統一存儲,既滿足流讀又滿足批讀;
?采用Paimon后,由于整個鏈路是準實時的,可以將處理時間從小時級縮短到分鐘級,通常控制在十分鐘以內;
?Paimon對并發寫操作有很好的支持,并且Paimon同時支持主鍵表和非主鍵表;
這里值得一提的是,Shopee開發了基于Paimon Branch的「日切功能」。簡單的說即按照天進行數據切分,避免全量分區的數據冗余存儲問題。
此外,Paimon社區也提供了一套工具,可以幫助大家進行schema evolution,將MySQL甚至Kafka的數據同步到Paimon中,上游增加列,Paimon表也會跟著增加列。
維度表 Lookup Join
Paimon主鍵表作為維度表場景,在各大公司都有成熟應用,實際生產環境經過很多次考驗。
Paimon作為維度表的場景分為兩類,一類是實時維度表:通過Flink任務接業務數據庫實時更新;另一類是離線維度表,也就是通過Spark離線任務T+1更新,也是維度表的絕大數據場景。
Paimon維度表同樣可以支持Flink Streamin SQL任務和Flink Batch任務。
我們在之前的文章Paimon生產環境問題小總結也提到過維度表優化的場景。
Paimon寬表場景
Paimon和其他的很多框架一樣,支持Partial Update,LSM Tree架構使得Paimon有很高的點查與合并性能,但是這里要特別注意幾個點:
?性能瓶頸,在超大規模數據更新或者超多列更新場景,后臺合并性能會有明顯的下降,需要謹慎測試后使用;
?Sequence Group排序,當業務有多個流進行拼接時,會給每個流定義一個單獨的 Sequence Group,對每個Sequence Group排序字段需要合理選擇,甚至會有多個字段排序情況;
PV/UV場景
在螞蟻計算 PV/UV 指標的例子中,之前是使用 Flink 的全狀態鏈路來實現的,但后來發現大量業務難以遷移到這種模式,因此將其替換為 Paimon。
利用 Paimon 的 upsert(更新或插入)更新機制來進行去重,并且利用 Paimon 的輕量級日志 changlog 來消費數據,為下游提供實時的 PV(Page View,頁面瀏覽量)和 UV 計算。
在整體資源消耗方面,Paimon方案使得整體CPU使用率下降了60%,同時checkpoint的穩定性也得到了顯著提升。此外,由于Paimon支持point-to-point(端到端)寫入,任務的回滾和重置時間也大幅減少。整體架構因為變得更加簡單,因此在業務研發成本上也實現了降低。
湖上OLAP
因為Spark和Paimon集成度很高,通過Spark或Flink進行一些ETL操作,將數據寫入Paimon中,基于Paimon進行z-order排序、聚簇,甚至構建文件級索引,然后通過Doris或StarRocks進行OLAP查詢,這樣就可以達到全鏈路OLAP的效果。
總結
基本上面內容就是各大公司落地的主要場景,當然還有一些其他場景我們后續再持續補充。
文章內容來自:大數據技術與架構
更多Paimon文章:博客園 | 巨人肩膀