簡介:微博經過將 Flink 實時流計算框架跟業務場景相結合,在平臺化、服務化方面作了很大的工做,在開發效率、穩定性方面也作了不少優化。咱們經過模塊化設計和平臺化開發,提升開發效率。git
微博機器學習研發中心數據計算負責人,高級系統工程師曹富強爲你們帶來 Flink 實時計算在微博的應用介紹。內容包括:github
一、微博介紹
二、數據計算平臺介紹
三、Flink 在數據計算平臺的典型應用apache
GitHub 地址
https://github.com/apache/flink
歡迎你們給 Flink 點贊送 star~服務器
本次給你們帶來的分享是 Flink 實時計算在微博的應用。微博是中國領先的社交媒體平臺,目前的日活躍用戶是 2.41 億,月活躍用戶是 5.5 億,其中移動用戶佔比超過了 94%。架構
下圖爲數據計算平臺的架構圖。負載均衡
在平臺之上咱們構建了一些服務,經過服務化的方式去支持各個業務方。框架
1.實時計算這邊的服務主要包括數據同步、內容去重、多模態內容理解、實時特徵生成、實時樣本拼接、流式模型訓練,這些是跟業務關係比較緊密的服務。另外,還支持 Flink 實時計算和 Storm 實時計算,這些是比較通用的基礎計算框架。
2.離線這部分,結合 Hive 的 SQL,SparkSQL 構建一個 SQL 計算服務,目前已經支持了微博內部絕大多數的業務方。機器學習
下面兩張圖是數據計算,其中一個是實時計算,另一個是離線計算。分佈式
以下圖所示,咱們基於 Flink 和 Storm 構建了一個實時特徵生成的服務。總體上來講,它會分爲做業詳情、輸入源特徵生成、輸出和資源配置。用戶按照咱們事先定義好的接口去開發特徵生成的 UDF 就能夠。其餘的像輸入、特徵寫入,都是平臺自動提供的,用戶只須要在頁面上配置就好。另外,平臺會提供輸入數據源的監控、做業的異常監控、特徵寫入監控、特徵讀取監控等,這些都是自動生成的。模塊化
下面介紹咱們基於 FlinkSQL 構建的批流一體。首先,咱們會統一元數據,將實時日誌跟離線日誌經過元數據管理平臺去統一。統一以後,用戶在提交做業的時候,咱們會有一個統一的調度層。調度這一塊,是根據做業的類型,做業的特色,目前集羣的負載的狀況,將做業調度到不一樣的集羣上去。
目前調度層支持的計算引擎主要就是 HiveSQL,SparkSQL 跟 FlinkSQL。Hive 和 Spark 的 SQL 主要用於批量計算,FlinkSQL 是作批流混跑。整個結果會輸出到數據倉庫中,提供給業務方使用。批流一體這塊大概有 4 個關鍵點:
首先介紹流式機器學習的幾個特色,最大的特色就是實時化。這塊分爲特徵的實時化和模型的實時化。
另外,
這裏簡單介紹一下咱們流式機器學習樣本的發展歷程。2018 年 10 月,咱們上線了第一個流式樣本做業,是經過 Storm 和外部存儲 Redis 去作的。2019 年 5 月,咱們使用新的實時計算框架 Flink,採用 union+timer 方案替代 window 計算來實現多個數據流的 join 操做。2019 年 10月,上線了一個xx樣本做業,單個做業的 qps 達到了幾十萬。在今年 4 月份,把樣本生成流程平臺化。到今年 6 月份,平臺化作了一個迭代,支持樣本的落盤,包括樣本庫,還有樣本的各類監控指標的完善。
流式機器學習所謂的樣本生成,其實就是多個數據流按照相同的 key 作一個拼接。好比說,咱們有三個數據流,數據清洗後的結果存儲爲 , k 是聚合的 key,v 是樣本中須要的值。數據 union 後作 KeyBy 聚合,聚合後將數據存儲在內存區域 value state 中。以下圖所示:
咱們把整個樣本拼接的過程作了一個平臺化的操做,分紅了 5 個模塊,包括輸入、數據清洗、樣本拼接、樣本的格式化和輸出。基於平臺化開發,用戶只須要關心業務邏輯部分便可。須要用戶開發的有:
其他的在UI上配置便可實現,具體有:
資源由平臺方審覈並配置。另外,整個平臺提供基礎的一些監控,包括輸入數據的監控、樣本指標的監控、做業異常監控、樣本輸出量的監控。
下圖爲流式機器學習項目的樣本。左邊是樣本生成的做業配置,右邊是樣本庫。樣本庫主要是作樣本的管理展現,包括樣本的說明權限,樣本的共享狀況等等。
最後介紹一下流式機器學習應用的效果。目前咱們支持實時樣本拼接,QPS 達到百萬級別。支持流式模型訓練,能夠同時支持幾百個模型訓練,模型實時性支持小時級/分鐘級 模型更新。流式學習全流程容災,支持全鏈路自動監控。近期在作的一個事情是流式的深度學習,增長實時模型的表達能力。還有強化學習這一塊,探索一些新的應用場景。
多模態就是使用機器學習的一些方法去實現或者理解多元模態信息的能力或者技術。微博的這塊主要包括圖片、視頻、音頻、文本。
舉個例子,咱們一開始作視頻分類的時候只用到了視頻抽幀後的那些幀,也就是圖片。後來第二次優化的時候,加入了音頻相關的東西,還有視頻對應的博文相關的東西,至關於把音頻、圖片、文本,多模態的融合考慮,更精準的去生成這個視頻的分類標籤。
下圖爲多模態內容理解的平臺架構。中間這部分是 Flink 實時計算,實時的接收圖片流、視頻流、發博流這些數據,而後經過模型插件調用下邊的基礎服務,深度學習模型服務。調用服務以後,會返回內容特徵。而後咱們把特徵存儲到特徵工程,經過數據中臺對外提供給各個業務方。整個做業運行過程當中全鏈路監控報警,異常狀況第一時間響應。平臺自動提供日誌收集,指標統計,CASE 追蹤等功能。中間這一塊使用 zk 作服務發現,解決實時計算和深度學習模型之間服務狀態同步的問題。另外,除了狀態同步,也會有一些負載均衡的策略。最下邊就是使用數據-對帳系統,進一步提升數據處理成功率。
多模態內容理解的 UI,主要包括做業信息、輸入源信息、模型信息、輸出信息、資源配置。這塊經過配置化的開發,去提升開發效率。而後會自動生成模型調用的一些監控指標,包括模型調用的成功率和耗時。看成業提交以後,會自動生成一個用於指標統計的做業。
在推薦場景下,若是給用戶一直推重複的內容,是很影響用戶體驗的。基於這個考慮,結合 Flink 實時流計算平臺、分佈式向量檢索系統和深度學習模型服務構建的一套內容去重服務平臺,具備低延遲、高穩定性、高召回率的特色。目前支持多個業務方,穩定性達到 99.9+%。
下圖爲內容去重服務的架構圖。最下邊是多媒體的模型訓練。這塊作離線的訓練。好比說咱們會拿到一些樣本數據,而後去作樣本處理,樣本處理完以後把樣本存到樣本庫中去。當我須要作模型訓練的時候,我從樣本庫中去拉取樣本,而後作模型訓練,訓練好的結果會保存到模型庫中去。
內容去重這裏主要用到的模型是向量生成模型。包括圖片的向量、文本的向量、視頻的向量。
當咱們把訓練好的模型驗證沒有問題以後,會把這個模型保存到模型庫中。模型庫保存了模型的一些基礎信息,包括模型的運行環境、版本。而後須要把模型部署上線,部署的過程須要從模型庫中拉取模型,同時須要知道這個模型的運行的一些技術環境。
模型部署好以後,咱們會經過 Flink 實時的從物料庫中讀取物料,而後調用多媒體預估服務去生成這些物料對應的向量。而後會把這些向量保存在 Weiss 庫中,它是微博自研的一個向量召回檢索系統。存到 Weiss 庫中以後會對這條物料作向量召回的過程,召回跟這條物料類似的一批物料。在精排比對這塊,會從全部的召回結果中加上必定的策略,選出最類似的那一條。而後把最類似的這一條跟當前物料聚合到一塊兒,造成一個內容 ID。最後業務去用的時候,也是經過物料對應的內容 ID 作去重。
內容去重的應用場景,主要業務場景有三個:
咱們經過將 Flink 實時流計算框架跟業務場景相結合,在平臺化、服務化方面作了很大的工做,在開發效率、穩定性方面也作了不少優化。咱們經過模塊化設計和平臺化開發,提升開發效率。目前實時數據計算平臺自帶全鏈路監控,數據指標統計和 debug case 追蹤(日誌回看)系統。另外,基於 FlinkSQL 在批流一體這塊目前也有必定的應用。這些都是 Flink 給咱們帶來的一些新的變化,咱們會持續不斷的探索 Flink 在微博中更大的應用空間。
更多 Flink 相關技術交流,可掃碼加入社區釘釘大羣~
活動推薦一
報名連接:https://1712399719478.huodongxing.com/event/1594531547711
活動推薦二
阿里雲基於 Apache Flink 構建的企業級產品-實時計算 Flink 版現開啓活動:
99元試用實時計算 Flink 全託管版本(包年包月、10CU)便可得定製 Flink 獨家定製T恤;另包3個月及以上還有85折優惠!
瞭解活動詳情:https://www.aliyun.com/product/bigdata/sc
本文內容由阿里雲實名註冊用戶自發貢獻,版權歸原做者全部,阿里雲開發者社區不擁有其著做權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。若是您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將馬上刪除涉嫌侵權內容。