在當(dāng)今瞬息萬變的電商市場,尤其是二手交易平臺閑魚,每秒都可能產(chǎn)生海量的用戶行為、商品更新、交易動態(tài)和聊天消息。要實時處理這些每秒千萬級的數(shù)據(jù)洪流,并為推薦、風(fēng)控、搜索、監(jiān)控等核心業(yè)務(wù)提供即時洞察,背后是一套極其復(fù)雜、高性能、高可用的實時數(shù)據(jù)處理服務(wù)體系。閑魚的實現(xiàn),是阿里集團多年大數(shù)據(jù)技術(shù)積淀與業(yè)務(wù)場景深度結(jié)合的典范。
一、 數(shù)據(jù)洪流的源頭:統(tǒng)一采集與接入
一切始于數(shù)據(jù)的產(chǎn)生。閑魚的實時數(shù)據(jù)源極其多樣:
- 用戶行為日志:點擊、瀏覽、搜索、收藏、聊天等,通過埋點SDK收集。
- 業(yè)務(wù)數(shù)據(jù)庫變更:商品發(fā)布、價格修改、訂單狀態(tài)更新等,通過阿里巴巴開源的Canal(基于數(shù)據(jù)庫binlog的增量訂閱與消費組件)實時捕獲MySQL的變更日志。
- 消息中間件:各類系統(tǒng)間的異步消息,如交易成功通知。
這些數(shù)據(jù)首先被統(tǒng)一接入到阿里云SLS(日志服務(wù))或Apache Kafka這類高吞吐、低延遲的消息隊列中。這一步的關(guān)鍵是輕量級、高并發(fā)、保序的客戶端采集Agent,以及服務(wù)端強大的分區(qū)(Partition)擴展能力,通過水平分片將每秒千萬級的數(shù)據(jù)流分散到數(shù)百甚至上千個分區(qū)中并行處理,避免單點瓶頸。
二、 核心引擎:流計算平臺的選型與優(yōu)化
這是實時處理的“大腦”。閑魚經(jīng)歷了從自研到擁抱開源,再到深度定制優(yōu)化的演進。目前其核心是 Apache Flink,一個高性能、高可靠、精確一次(Exactly-Once)語義的流處理框架。
為何選擇Flink?
- 低延遲與高吞吐的完美平衡:其基于流水線的執(zhí)行模型,而非微批處理,使得數(shù)據(jù)處理延遲可低至毫秒級,同時吞吐量極大。
- 狀態(tài)管理:內(nèi)置強大的狀態(tài)后端(如RocksDB),可以高效管理窗口聚合、用戶畫像實時更新等需要記住歷史數(shù)據(jù)的計算。
- 事件時間與亂序處理:支持基于事件時間(Event Time)的窗口計算,并能通過水位線(Watermark)機制處理網(wǎng)絡(luò)延遲導(dǎo)致的數(shù)據(jù)亂序,這對精準統(tǒng)計(如每分鐘交易額)至關(guān)重要。
閑魚團隊對Flink進行了大量深度優(yōu)化:
- 資源調(diào)度:與阿里云K8s、Flink on Yarn深度集成,實現(xiàn)動態(tài)擴縮容,在“雙11”等大促期間秒級擴容數(shù)千個計算核心。
- 狀態(tài)后端優(yōu)化:針對RocksDB進行參數(shù)調(diào)優(yōu),并探索新型狀態(tài)后端以降低訪問延遲。
- SQL化與平臺化:提供Flink SQL開發(fā)界面,讓業(yè)務(wù)開發(fā)人員能更專注于邏輯而非底層API,提升開發(fā)效率。
三、 架構(gòu)全景:分層與協(xié)同
閑魚的實時數(shù)據(jù)處理服務(wù)并非單一系統(tǒng),而是一個分層協(xié)同的體系:
- 實時計算層(Flink Jobs集群):
- 實時ETL:對原始數(shù)據(jù)進行清洗、格式化、維度關(guān)聯(lián)(如將商品ID關(guān)聯(lián)到類目、賣家信息),輸出結(jié)構(gòu)化的實時數(shù)據(jù)流。
- 實時聚合:進行秒/分鐘級別的窗口聚合,如實時GMV大盤、熱門商品排行、地域分布熱力圖。
- 復(fù)雜事件處理(CEP):用于實時風(fēng)控,例如識別“短時間內(nèi)發(fā)布大量相似商品”的欺詐模式。
- 實時特征計算:為推薦和搜索引擎提供用戶實時興趣向量、商品實時熱度分等。
- 實時存儲與查詢層:計算結(jié)果需要被快速存儲和訪問。
- 高性能KV存儲:如 阿里云Tair(Redis企業(yè)版) 或 HBase,用于存儲實時畫像、模型特征、計數(shù)(如商品瀏覽量)。它們提供亞毫秒級的讀寫能力。
- 實時OLAP數(shù)據(jù)庫:如 Apache Druid 或 ClickHouse,用于存儲聚合后的時間序列數(shù)據(jù),支持業(yè)務(wù)人員通過BI工具進行多維度、快速的下鉆分析。
- 消息隊列:處理后的數(shù)據(jù)流再次寫入Kafka,供下游多個業(yè)務(wù)方訂閱消費,形成數(shù)據(jù)流閉環(huán)。
- 數(shù)據(jù)服務(wù)層:
- 提供統(tǒng)一的HSF/Dubbo RPC接口或 HTTP API,將實時數(shù)據(jù)(如商品實時瀏覽量、賣家信用狀態(tài))封裝成服務(wù),供前端、推薦、風(fēng)控等系統(tǒng)低延遲調(diào)用。
四、 保障千萬級處理的基石:穩(wěn)定性與運維
- 端到端精確一次(Exactly-Once):從數(shù)據(jù)源(Kafka)-> Flink計算 -> 數(shù)據(jù)匯(如HBase),通過Flink的檢查點(Checkpoint)機制和兩階段提交(Two-Phase-Commit)Sink,確保數(shù)據(jù)在任意環(huán)節(jié)故障恢復(fù)后不丟不重。
- 智能監(jiān)控與告警:
- 全鏈路監(jiān)控:對數(shù)據(jù)延遲(Lag)、吞吐量(TPS)、CPU/內(nèi)存使用率、Checkpoint成功率進行全方位監(jiān)控。
- 業(yè)務(wù)指標監(jiān)控:如實時GMV是否斷崖式下跌,這可能是數(shù)據(jù)處理鏈路出現(xiàn)問題的信號。
- 自動故障恢復(fù)與降級:當(dāng)某個Flink Task失敗時,自動從最近的Checkpoint重啟;當(dāng)實時系統(tǒng)不可用時,可降級使用近線數(shù)據(jù)(如幾分鐘前的數(shù)據(jù))作為兜底。
- 資源成本優(yōu)化:通過混部技術(shù)(將在線業(yè)務(wù)和實時計算業(yè)務(wù)部署在同一批物理機上,利用其資源使用波谷)、彈性伸縮、計算任務(wù)合并(將多個小Job合并)等手段,在保障性能的同時控制巨大的計算成本。
###
閑魚每秒千萬級實時數(shù)據(jù)處理的實現(xiàn),是一個集統(tǒng)一接入、Flink流計算引擎、多層次實時存儲、標準化數(shù)據(jù)服務(wù)、強悍的穩(wěn)定性保障于一體的系統(tǒng)工程。它不僅僅是一項技術(shù),更是驅(qū)動閑魚業(yè)務(wù)實時化、智能化的核心引擎。從你點擊一個商品的瞬間,到系統(tǒng)為你推薦下一個可能感興趣的物品,這背后正是這套實時數(shù)據(jù)處理服務(wù)在毫秒間完成的采集、計算與反饋。隨著實時數(shù)倉(Real-Time Data Warehouse)和流批一體(Stream-Batch Unification)技術(shù)的成熟,這套體系將向著更簡單、更統(tǒng)一、更智能的方向持續(xù)演進。