京東流量資產基于湖倉架構的落地實踐

?在當今數字化商業浪潮中,數據無疑是企業的核心資產,而流量數據更是電商巨頭京東業務運轉的關鍵驅動力。它廣泛應用于搜索推薦、廣告投放等多個核心業務場景,直接影響著用戶體驗和商業效益。但隨著業務規模的不斷膨脹,傳統架構在處理流量數據時逐漸力不從心,升級架構迫在眉睫。本文將深入剖析京東流量資產架構從 Lambda 架構邁向湖倉一體架構的變革之旅,包括面臨的挑戰、創新的解決方案、顯著的收益以及未來的發展方向。

今天的介紹會圍繞下面四點展開:

1.?背景與痛點

2.?挑戰與優化

3.?收益與表現

4.?總結與展望


01背景與痛點

京東早期采用?Lambda?架構,在處理流量數據時,構建了離線和實時兩條獨立的處理鏈路。在實時鏈路中,數據經埋點采集服務裁剪解析后,進入消息隊列,再由?Flink?實時加工處理,供下游業務實時使用;離線鏈路則將全量數據存儲到對象存儲,后續通過?Hive?加工,為下游業務提供離線數據分析支持。

這種架構雖然能提供不同時效的數據服務,但弊端明顯。計算資源方面,兩條鏈路獨立運轉,導致計算資源雙倍消耗,開發和維護成本也隨之翻倍。存儲和計算架構異構,使得實時流數據和離線表數據常常無法對齊,存在數據差距,下游用戶在使用數據時,需要花費大量時間和精力排查解決數據不一致問題,使用體驗較差。

此外,為優化離線鏈路時效,采用小時級加工替代?T+1?批處理,卻引入了數據冗余存儲和多次拷貝的問題,進一步增加了存儲和計算成本。而且,流量數倉?GDM?層?T+1?數據時效在日常通常為凌晨兩點,面對復雜的內部業務場景,下游計算處理時間緊張,數據的?SLA(數據可用性保證)難以保障,在大促或流量高峰期,問題更加突出,嚴重影響業務決策的及時性和準確性。

為解決?Lambda?架構的痛點,京東引入湖倉一體架構。湖倉架構具有諸多特性,如支持數據更新、存儲分離,能處理結構化和非結構化等多種數據類型。在流量資產場景中,其端到端的分鐘級能力、支持事務保障數據讀寫一致性、MVCC(多版本并發控制)提供輕量級時間旅行能力以及數據重新布局降低存儲和查詢成本等特性,發揮了關鍵作用。

圖片

在新架構下,數據經埋點采集服務進入消息隊列,由?Flink?實時加工后實時寫入湖表。湖表數據既能滿足下游業務分鐘級時延的實時需求,也可供下游業務通過批讀方式進行離線處理。新架構將兩條鏈路收斂為一條,統一了數據口徑,減少了存儲成本。基于?Hudi?的事務能力,實現了數據處理的?EOS(Exactly-Once Semantics,精確一次語義),確保數據處理的準確性和完整性。Flink?與?Hudi?的技術組合,為下游業務提供了近實時的精準數據,有力地支持了業務的高效運營。

02挑戰與優化

1.?多模?IO?能力優化:突破寫入性能瓶頸

在?Flink?實時寫入?Hudi?的過程中,某些?HDFS?集群在熱點時段繁忙度高,導致?Flink?寫入任務頻繁出現?timeout?重試,甚至作業失敗重啟,嚴重限制了寫入性能。單純擴充?Flink?資源,對性能提升效果不佳。

京東自研多模?IO?能力,將湖表物理存儲劃分為緩沖層和持久層。創新性地設計統一的?IO?抽象層和?Hudi?邏輯表視圖,底層存儲可插拔集成多種介質,如?HDFS、OSS、Kafka、HBase、Redis?等。熱數據先寫入以高性能?HDFS?為基礎的緩沖層,后續通過?Hudi?的?Clustering、Compaction?表服務將數據搬運到共享?HDFS?持久層。

開啟數據緩沖層后,Flink?實時入湖任務的寫入均值速率和穩定性顯著提升。對比測試顯示,寫入吞吐提升?104%,checkpoint?平均完成時間減少?95%,作業異常失敗次數大幅降低,穩定性提升?97%,有效解決了寫入性能和任務穩定性問題。

圖片

2.?湖表動態分區策略:應對數據傾斜難題

業務分區數據傾斜嚴重,最大分區與最小分區數據量相差達?730?萬倍。若直接寫入湖表,會產生大量小文件,給?HDFS?存儲和后續處理帶來巨大壓力,同時單個?subtask?寫多個分區文件,頻繁切換文件柄也會消耗大量性能。

京東在?Flink?流寫?Hudi?的核心拓撲鏈路上,新增自定義?Partitioner?策略。根據分區大小設計動態分區方案,數據量大的分區(如?S?分區)單獨路由到特定的?subtask?集合,集合大小依據分區數據量確定;小分區則三兩成組路由到其他單獨的?subtask。優化后,一次?commit?寫入文件數從約?10.8?萬個減少到?6000?多個,減少了?94%,寫入性能提升一倍多,有效緩解了數據傾斜和小文件問題。

圖片

3.?多寫并發?Append:突破流量增長瓶頸

隨著流量數據量持續增長,尤其是大促期間數據量驟增,Flink?機房資源有限,單個?Flink?集群即使擴容也會出現性能瓶頸。

京東將入湖任務拆分,利用湖的多寫能力并發?Append?同一張流量湖表。例如,將數據量大的?S、P?分區拆分成一個任務,非?S、P?分區拆分成另一個任務。在拆分過程中,解決了檢查點元數據沖突和?Hive?元數據同步沖突等問題。通過在每個任務的檢查點元數據目錄維護各自元數據信息,確保任務失敗時可回滾恢復;每個作業維護自己的?last_commit_time?標識,避免分區缺失問題,實現了輕量級并發?Append,提升了實時入湖任務的寫入性能。

圖片

4.?反序列化優化:降低行級反序列化成本

新架構采用?JSON?數據格式,且比舊架構多了?120?多個字段,行級反序列化成本高,成為任務性能瓶頸。

京東采取兩項優化措施。一是將反序列化操作從?source?算子中抽離,source?算子僅負責從?Kafka?拉取字節級消息數據,通過注冊專門的反序列化?lookup table?執行反序列化操作,并擴展該算子并行度提升讀取性能。二是在拆分任務時,將消息業務域字段寫入?Kafka?消息?header?中,拆分后的任務只需解析?header?過濾數據,避免反序列化整條消息,有效降低了反序列化開銷。

圖片

5.?流轉批處理:精準調度離線任務

在處理實時湖表時,需要一種機制感知湖表業務時間水位線,判斷?T-1?數據是否準備就緒,以啟動下游離線加工任務。

京東通過流量湖表的流轉批機制實現這一目標。改造?Flink Hudi writer,使其將業務時間寫入元數據,流轉批服務定期掃描湖表元數據中的業務水位線。當所有分區水位線最小值超過?T?日零點,且對應的?Clustering?表服務合并完成時,表明?T-1?數據準備就緒,下游離線任務即可調度運行,確保了離線任務調度的準確性和及時性。

圖片

03顯著成效:湖倉架構升級的收益

1.?數據時效性飛躍

湖倉一體架構升級后,數據時效性從?T+1?提升到?15?分鐘,SLA?從凌晨兩點半提前到零點半。數據量越大,SLA?提升越明顯,為下游業務提供了更充裕的處理時間,極大地提高了業務響應速度和決策效率。

2.?存儲成本降低

基于社區?Clustering?能力,實現分區級?30?分鐘數據全局排序與合并,提升了數據壓縮率,存儲數據量從每天?120TB?優化到?50TB,存儲成本降低?58.3%。在流量數據增長?60%?的情況下,每年節省兩千多萬元,有效節約了企業運營成本。

3.?大促表現卓越

在去年雙?11?大促期間,面對流量洪峰,最大流量曝光模型總量同比增長?80%,均值達每分鐘?4.5?億。新架構首次實現流量數據全時間段平穩運行且無延遲,SLA?更加穩定,T+1 GDM?層流量數據全部就緒時間從?6?點?03?分提前到 0?點?54?分,提前了?5?個小時,有力保障了大促期間業務的穩定高效運行。

04 未來展望:持續創新的方向

1.?探索生產環境大規模流讀

目前,流量數據資產下游業務主要以批讀方式為主,流讀在生產環境中尚未大規模驗證。未來,京東將重點關注流讀數據的穩定性、處理性能和數據完整性。當前已在流讀方面進行了部分完善,如支持更細粒度的限速、靈活的數據分發策略、多寫場景下的流讀功能,并豐富了?metric?指標用于監控,后續將進一步探索和優化,推動流讀在生產環境中的大規模應用。

2.?追求?Hudi?秒級實時處理

數據入湖時,寫入速度較慢,通常為分鐘級提交。京東計劃擴展湖表多模?IO?能力,將數據寫入?Kafka、HBase、Redis?等高速存儲中,并在湖表元數據記錄高速存儲的位點和?key?等元信息。讀取時,將持久存儲與高速存儲內容聯合,實現?Hudi?的秒級時延,進一步提升數據處理的實時性。

京東流量資產湖倉一體架構的升級實踐,成功解決了傳統架構的諸多問題,取得了顯著的成效。未來,京東將繼續在流讀和實時處理等方面深入探索創新,不斷挖掘流量數據的價值,為業務發展注入強大動力,也為行業數據架構的發展提供了寶貴的借鑒經驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92377.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

???????【Datawhale AI夏令營】多模態RAG財報問答挑戰賽:學習筆記與上分思考

一、 初識賽題——從迷茫到清晰剛看到賽題時,坦白說有些不知所措。“多模態”、“RAG”、“圖文混排PDF”,這些詞匯組合在一起,聽起來就像一個龐大而復雜的工程。但當我強迫自己靜下心來,從“終點”(提交格式和評審規則…

數據挖掘2.6 Perceptron Modeling 感知器建模

Perceptron Modeling 感知器建模Linear Discriminants 線性判別式Loss Function 損失函數misclassification 誤分類0-1 Loss/Error function 0-1損失函數Hinge Loss Function 鉸鏈損失函數Optimization 優化算法Linear Discriminants 線性判別式 線性判別式公式 f(x;w)w1x(1)w…

使用qemu運行與GDB調試內核

目錄 一、前期準備 二、內核編譯 三、QEMU與GDB 1、QEMU調試參數 2、gdb vmlinux 一、前期準備 內核鏡像:bzimage gdb:x86_64 QEMU:qemu-system-x86_64 前置知識: (1)內核編譯 (2&#x…

歐盟 Radio Equipment Directive (RED)

歐盟 Radio Equipment Directive (RED) ——從 2014/53/EU 原文到 2025-08-01 強制生效的網絡安全新規,一次看懂全部關鍵點。1. 法規身份與適用范圍要素內容指令全稱Directive 2014/53/EU on radio equipment取代指令1999/5/EC (R&TTE)適用產品所有“有意發射/接…

【FastExcel】解決ReadSheet在Map中獲取對象不準確問題(已提交PR并合并到開源社區)

解決問題&#xff1a;源碼ReadSheet在同一個Map中獲取對象不準確問題 PR&#xff1a;Fixed the issue where different ReadSheet objects could not get the correct value when comparing them. 一&#xff1a;問題場景 ReadSheet在同一個Map中獲取對象不準確(如Map<…

【網絡安全入門基礎教程】TCP/IP協議深入解析(非常詳細)零基礎入門到精通,收藏這一篇就夠了

前言 這是小編給粉絲盆友們整理的網絡安全入門到精通系列第三章計算機網絡中TCP/IP協議的解析&#xff0c;喜歡的朋友們&#xff0c;記得給大白點贊支持和收藏一下&#xff0c;關注我&#xff0c;學習黑客技術。TCP/IP協議包含了一系列的協議&#xff0c;也叫TCP/IP協議族&…

Latex中公式部分輸入正體的字母\mathrm{c}

Latex中公式部分輸入正體的字母\mathrm{c}“\mathrm{c}”如何在Word中輸入\mathrm{c}“\mathrm{c}” 在 LaTeX 中&#xff0c;“\mathrm{c}” 用于在數學模式中排版“c”這個字母為羅馬體&#xff08;正體&#xff09;。“\mathrm” 是羅馬字體命令&#xff0c;它告訴LaTeX以羅…

Document Picture-in-Picture API擁抱全新浮窗體驗[參考:window.open]

在前端開發中&#xff0c;我們經常會遇到這樣的需求&#xff1a;彈出一個浮動窗口來顯示一些實時信息、工具欄或視頻內容。過去我們會用 window.open()&#xff0c;后來越來越多的開發者傾向于使用 Modal。但現在&#xff0c;一個更現代的 API 出現了——Document Picture-in-P…

【指南版】網絡與信息安全崗位系列(三):安全運維工程師

一、安全運維工程師到底做什么&#xff1f;—— 用校園場景幫你理解簡單說&#xff0c;安全運維工程師就像 “網絡世界的安保隊長 系統管家”&#xff1a;既要實時監控網絡和系統的 “異常動靜”&#xff08;類似學校保安巡邏查隱患&#xff09;&#xff0c;又要負責日常的安全…

matlab——simulink學習(5向NXP庫中添加新模塊)

向NXP庫中添加新的函數模塊一、環境二、庫添加模塊1.打開文件夾2.創建文件3.添加S-Function三、瀏覽器添加模塊一、環境 Windows10、MATLAB R2022b、安裝NXP的S32K1XX系列工具包 二、庫添加模塊 1.打開文件夾 在文件系統中找到安裝工具包的位置&#xff0c;用文件資源管理器…

使用ProxySql實現MySQL的讀寫分離

ProxySQL簡介1、ProxySQL是一款開源的使用C編寫的MySQL集群代理中間件&#xff1b;2、用于在MySQL數據庫和客戶端之間進行負載均衡、查詢緩存、故障轉移和查詢分發&#xff1b;3、它可以作為中間層插入到應用程序和數據庫之間&#xff1b;4、特點是高效靈活&#xff0c;使用簡單…

WiFi 核心概念與實戰用例全解

&#x1f4d6; 推薦閱讀&#xff1a;《Yocto項目實戰教程:高效定制嵌入式Linux系統》 &#x1f3a5; 更多學習視頻請關注 B 站&#xff1a;嵌入式Jerry 1. WiFi基礎與協議 WiFi&#xff08;Wireless Fidelity&#xff09;是基于IEEE 802.11協議族的無線局域網&#xff08;WLAN…

面向遠程智能終端的超低延遲RTSP|RTMP視頻SDK架構與實踐指南

引言&#xff1a;遙操作時代&#xff0c;視覺鏈路已成“主控神經元” 從工業巡檢到應急救援&#xff0c;從城市安防到邊境監控&#xff0c;遠程操控正成為智能終端與人機協同的重要落點。而在這些場景中&#xff0c;“視覺”不再只是用來觀看的工具&#xff0c;而是貫穿感知、…

C++中的繼承:從基礎到復雜

目錄 前言 1. 繼承的基本概念 2. 繼承方式與訪問控制 3. 派生類與基類的對象轉換 4. 繼承中的作用域 5. 派生類的默認成員函數 6. 繼承中的特殊關系 6.1 繼承與友元 6.2 繼承與靜態成員 7. 復雜的菱形繼承問題 8. 繼承與組合的選擇 9. 常見面試題 總結 前言 繼承…

Eyevinn 徹底改變開源部署模式

該咨詢公司借助Akamai云平臺&#xff0c;為其創新的開源平臺和可持續收益分成模式提供強大支持。 "時間就是金錢&#xff0c;我們通過Akamai云平臺快速將開源云平臺投入生產。" ——Eyevinn Technology研發副總裁 Jonas Birm實現可持續視頻流媒體服務 自2013年以來&…

17day-人工智能-機器學習-分類算法-KNN

1. 什么是knn算法knn算法全名叫做k-近鄰算法&#xff08;K-Nearest Neighbors&#xff0c;簡稱KNN&#xff09;&#xff0c;看到名字是不是能想到是算距離的&#xff0c;第一個k是指超參數的意思&#xff0c;就是可以認為設置的意思&#xff0c;這里是指最近的k個樣本。2. 為什…

12-netty基礎-手寫rpc-編解碼-04

netty系列文章&#xff1a; 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

解決 Windows 下的“幽靈文件”——記一次與帶空格的 .gitignore 文件的艱難斗爭

引言 你是否遇到過這樣的情況&#xff1a;一個文件明明躺在你的文件夾里&#xff0c;ls 或 dir 命令都能清楚地看到它&#xff0c;但無論你用什么方法嘗試刪除&#xff0c;系統都冷酷地告訴你“找不到文件”&#xff1f; 就在今天&#xff0c;我就遇到了這樣一個“幽靈”般的 .…

(易視寶)易視TV is-E4-G-全志A20芯片-安卓4-燒寫卡刷工具及教程

&#xff08;易視寶&#xff09;易視TV is-E4-G-全志A20芯片-安卓4-燒寫卡刷工具及教程PhoenixCard_V309燒錄步驟&#xff1a;1、將TF或SD卡插入計算機&#xff0c;打開軟件&#xff1b;2、選擇固件所在目錄&#xff1b;3、燒寫模式選“卡量產”4、點擊“燒錄”開始量產&#x…