<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Flink 實時計算在微博的應(yīng)用

          共 5741字,需瀏覽 12分鐘

           ·

          2021-05-20 16:43

          摘要:微博機器學(xué)習(xí)研發(fā)中心數(shù)據(jù)計算負(fù)責(zé)人,高級系統(tǒng)工程師曹富強為大家?guī)?Flink 實時計算在微博的應(yīng)用介紹。內(nèi)容包括:

          1. 微博介紹

          2. 數(shù)據(jù)計算平臺介紹

          3. Flink 在數(shù)據(jù)計算平臺的典型應(yīng)用




           GitHub 地址 
          https://github.com/apache/flink
          歡迎大家給 Flink 點贊送 star~

          一、微博介紹


          本次給大家?guī)淼姆窒硎?Flink 實時計算在微博的應(yīng)用。微博是中國領(lǐng)先的社交媒體平臺,目前的日活躍用戶是 2.41 億,月活躍用戶是 5.5 億,其中移動用戶占比超過了 94%。


          二、數(shù)據(jù)計算平臺介紹


          1. 數(shù)據(jù)計算平臺概況


          下圖為數(shù)據(jù)計算平臺的架構(gòu)圖。

          • 首先是調(diào)度,這塊基于 K8s 和 Yarn 分別部署了實時數(shù)據(jù)處理的 Flink、Storm,以及用于離線處理的 SQL 服務(wù)。

          • 在集群之上,我們部署了微博的 AI 平臺,通過這個平臺去對作業(yè)、數(shù)據(jù)、資源、樣本等進行管理。

          • 在平臺之上我們構(gòu)建了一些服務(wù),通過服務(wù)化的方式去支持各個業(yè)務(wù)方。

            • 實時計算這邊的服務(wù)主要包括數(shù)據(jù)同步、內(nèi)容去重、多模態(tài)內(nèi)容理解、實時特征生成、實時樣本拼接、流式模型訓(xùn)練,這些是跟業(yè)務(wù)關(guān)系比較緊密的服務(wù)。另外,還支持 Flink 實時計算和 Storm 實時計算,這些是比較通用的基礎(chǔ)計算框架。
            • 離線這部分,結(jié)合 Hive 的 SQL,SparkSQL 構(gòu)建一個 SQL 計算服務(wù),目前已經(jīng)支持了微博內(nèi)部絕大多數(shù)的業(yè)務(wù)方。

          • 數(shù)據(jù)的輸出是采用數(shù)倉、特征工程這些數(shù)據(jù)中臺的組建,對外提供數(shù)據(jù)輸出。整體上來說,目前我們在線跑的實時計算的作業(yè)將近 1000 多個,離線作業(yè)超過了 5000 多個,每天處理的數(shù)據(jù)量超過了 3 PB。


          2. 數(shù)據(jù)計算


          下面兩張圖是數(shù)據(jù)計算,其中一個是實時計算,另外一個是離線計算。

          • 實時計算主要包括實時的特征生成,多媒體特征生成和實時樣本生成,這些跟業(yè)務(wù)關(guān)系比較緊密。另外,也提供一些基礎(chǔ)的 flink 實時計算和 storm 實時計算。

          • 離線計算主要包括 SQL 計算。主要包括 SQL 的即席查詢、數(shù)據(jù)生成、數(shù)據(jù)查詢和表管理。表管理主要就是數(shù)倉的管理,包括表的元數(shù)據(jù)的管理,表的使用權(quán)限,還有表的上下游的血緣關(guān)系。


          3. 實時特征


          如下圖所示,我們基于 Flink 和 Storm 構(gòu)建了一個實時特征生成的服務(wù)。整體上來說,它會分為作業(yè)詳情、輸入源特征生成、輸出和資源配置。用戶按照我們事先定義好的接口去開發(fā)特征生成的 UDF 就可以。其他的像輸入、特征寫入,都是平臺自動提供的,用戶只需要在頁面上配置就好。另外,平臺會提供輸入數(shù)據(jù)源的監(jiān)控、作業(yè)的異常監(jiān)控、特征寫入監(jiān)控、特征讀取監(jiān)控等,這些都是自動生成的。


          4. 流批一體


          下面介紹我們基于 FlinkSQL 構(gòu)建的批流一體。首先,我們會統(tǒng)一元數(shù)據(jù),將實時日志跟離線日志通過元數(shù)據(jù)管理平臺去統(tǒng)一。統(tǒng)一之后,用戶在提交作業(yè)的時候,我們會有一個統(tǒng)一的調(diào)度層。調(diào)度這一塊,是根據(jù)作業(yè)的類型,作業(yè)的特點,目前集群的負(fù)載的情況,將作業(yè)調(diào)度到不同的集群上去。

          目前調(diào)度層支持的計算引擎主要就是 HiveSQL,SparkSQL 跟 FlinkSQL。Hive 和 Spark 的 SQL 主要用于批量計算,F(xiàn)linkSQL 是做批流混跑。整個結(jié)果會輸出到數(shù)據(jù)倉庫中,提供給業(yè)務(wù)方使用。批流一體這塊大概有 4 個關(guān)鍵點:

          • 第一,批流代碼統(tǒng)一,提高開發(fā)效率。

          • 第二,批流元數(shù)據(jù)統(tǒng)一。統(tǒng)一管理,保證元數(shù)據(jù)一致。

          • 第三,批流程序混跑,節(jié)省資源。

          • 第四,批流統(tǒng)一調(diào)度,提高集群利用率。


          5. 數(shù)據(jù)倉庫


          • 針對離線倉庫,我們把數(shù)據(jù)分成了三層,一個是原始日志,另外一個是中間層,還有一個是數(shù)據(jù)服務(wù)層。中間是元數(shù)據(jù)的統(tǒng)一,下邊是實時數(shù)倉。

          • 針對實時數(shù)倉,我們通過 FlinkSQL 對這些原始日志做流式的一個 ETL,再通過一個流式匯總將最終的數(shù)據(jù)結(jié)果寫到數(shù)據(jù)的服務(wù)層,同時也會把它存儲到各種實時存儲,比如 ES、Hbase、Redis、ClickHouse 中去。我們可以通過實時存儲對外提供數(shù)據(jù)的查詢。還提供數(shù)據(jù)進一步數(shù)據(jù)計算的能力。也就是說,建立實時數(shù)倉主要是去解決離線特征生成的周期長的問題。另外就是使用 FlinkSQL 去解決 streaming 作業(yè)開發(fā)周期比較長的問題。其中的一個關(guān)鍵點還是離線數(shù)倉跟實時數(shù)倉的元數(shù)據(jù)的管理。


          三、Flink 在數(shù)據(jù)計算平臺的典型應(yīng)用


          1. 流式機器學(xué)習(xí)


          首先介紹流式機器學(xué)習(xí)的幾個特點,最大的特點就是實時化。這塊分為特征的實時化和模型的實時化。

          • 特征實時化主要是為了更及時的去反饋用戶行為,更細(xì)粒度的去刻畫用戶。

          • 模型實時化是要根據(jù)線上樣本實時訓(xùn)練模型,及時反映對象的線上變化情況。


          ■   微博流式機器學(xué)習(xí)的特點:

          • 樣本的規(guī)模大,目前的實時樣本能達(dá)到百萬級別的 qps。

          • 模型的規(guī)模大。模型訓(xùn)練參數(shù)這塊,整個框架會支持千億級別的訓(xùn)練規(guī)模。

          • 對作業(yè)的穩(wěn)定性要求比較高。

          • 樣本的實時性要求高。

          • 模型的實時性高。

          • 平臺業(yè)務(wù)需求多。

          ■   流式機器學(xué)習(xí)有幾個比較難的問題:

          • 一個就是全鏈路,端到端的鏈路是比較長的。比如說,一個流式機器學(xué)習(xí)的流程會從日志收集開始,到特征生成,再到樣本生成,然后到模型訓(xùn)練,最終到服務(wù)上線,整個流程非常長。任何一個環(huán)節(jié)有問題,都會影響到最終的用戶體驗。所以我們針對每一個環(huán)節(jié)都部署了一套比較完善的全鏈路的監(jiān)控系統(tǒng),并且有比較豐富的監(jiān)控指標(biāo)。

          • 另外一個是它的數(shù)據(jù)規(guī)模大,包括海量的用戶日志,樣本規(guī)模和模型規(guī)模。我們調(diào)研了常用的實時計算框架,最終選擇了 Flink 去解決這個問題。


          ■   流失機器學(xué)習(xí)流程:

          • 首先是離線訓(xùn)練,我們拿到離線日志,去離線的生成樣本之后,通過Flink去讀取樣本,然后去做離線訓(xùn)練。訓(xùn)練完成之后把這些訓(xùn)練的結(jié)果參數(shù)保存在離線的參數(shù)服務(wù)器中。這個結(jié)果會作為模型服務(wù)的 Base 模型,用于實時的冷啟動。

          • 然后是實時的流式機器學(xué)習(xí)的流程。我們會去拉取實時的日志,比如說微博的發(fā)布內(nèi)容,互動日志等。拉取這些日志之后,使用 Flink 去生成它的樣本,然后做實時的訓(xùn)練。訓(xùn)練完成之后會把訓(xùn)練的參數(shù)保存在一個實時的參數(shù)服務(wù)器中,然后會定期的從實時的參數(shù)服務(wù)器同步到實時的參數(shù)服務(wù)器中。

          • 最后是模型服務(wù)這一塊,它會從參數(shù)服務(wù)中拉取到模型對應(yīng)的那些參數(shù),去推薦用戶特征,或者說物料的特征。通過模型對用戶和物料相關(guān)的特征、行為打分,然后排序服務(wù)會調(diào)取打分的結(jié)果,加上一些推薦的策略,去選出它認(rèn)為最適合用戶的這一條物料,并反饋給用戶。用戶在客戶端產(chǎn)生一些互動行為之后,又發(fā)出新的在線請求,產(chǎn)生新的日志。所以整個流式學(xué)習(xí)的流程是一個閉環(huán)的流程。

          另外,

          • 離線的樣本的延時和模型的更新是天級或者小時級,而流式則達(dá)到了小時級或者分鐘級;

          • 離線模型訓(xùn)練的計算壓力是比較集中的,而實時的計算壓力比較分散。


          ■   樣本

          這里簡單介紹一下我們流式機器學(xué)習(xí)樣本的發(fā)展歷程。2018 年 10 月,我們上線了第一個流式樣本作業(yè),是通過 Storm 和外部存儲 Redis 去做的。2019 年 5 月,我們使用新的實時計算框架 Flink,采用 union+timer 方案替代 window 計算來實現(xiàn)多個數(shù)據(jù)流的 join 操作。2019 年 10月,上線了一個xx樣本作業(yè),單個作業(yè)的 qps 達(dá)到了幾十萬。在今年 4 月份,把樣本生成流程平臺化。到今年 6 月份,平臺化做了一個迭代,支持樣本的落盤,包括樣本庫,還有樣本的各種監(jiān)控指標(biāo)的完善。


          流式機器學(xué)習(xí)所謂的樣本生成,其實就是多個數(shù)據(jù)流按照相同的 key 做一個拼接。比如說,我們有三個數(shù)據(jù)流,數(shù)據(jù)清洗后的結(jié)果存儲為 <k , v>, k 是聚合的 key,v 是樣本中需要的值。數(shù)據(jù) union 后做 KeyBy 聚合,聚合后將數(shù)據(jù)存儲在內(nèi)存區(qū)域 value state 中。如下圖所示:

          • 如果 k1 不存在,則注冊 timer,再存到 state 中。

          • 如果 k1 存在,就從 state 中把它給拿出來,更新之后再存進去。到最后它的 timer 到期之后,就會將這條數(shù)據(jù)輸出,并且從 state 中清除掉。


          ■   樣本平臺

          我們把整個樣本拼接的過程做了一個平臺化的操作,分成了 5 個模塊,包括輸入、數(shù)據(jù)清洗、樣本拼接、樣本的格式化和輸出。基于平臺化開發(fā),用戶只需要關(guān)心業(yè)務(wù)邏輯部分即可。需要用戶開發(fā)的有:

          • 對應(yīng)輸入數(shù)據(jù)的數(shù)據(jù)清洗邏輯。

          • 樣本輸出前的數(shù)據(jù)格式化邏輯。

          其余的在UI上配置即可實現(xiàn),具體有:

          • 樣本拼接的時間窗口。

          • 窗口內(nèi)對字段的聚合操作。

          資源由平臺方審核并配置。另外,整個平臺提供基礎(chǔ)的一些監(jiān)控,包括輸入數(shù)據(jù)的監(jiān)控、樣本指標(biāo)的監(jiān)控、作業(yè)異常監(jiān)控、樣本輸出量的監(jiān)控。


          ■   流式機器學(xué)習(xí)項目的樣本 UI

          下圖為流式機器學(xué)習(xí)項目的樣本。左邊是樣本生成的作業(yè)配置,右邊是樣本庫。樣本庫主要是做樣本的管理展示,包括樣本的說明權(quán)限,樣本的共享情況等等。


          ■   流失機器學(xué)習(xí)的應(yīng)用

          最后介紹一下流式機器學(xué)習(xí)應(yīng)用的效果。目前我們支持實時樣本拼接,QPS 達(dá)到百萬級別。支持流式模型訓(xùn)練,可以同時支持幾百個模型訓(xùn)練,模型實時性支持小時級/分鐘級 模型更新。流式學(xué)習(xí)全流程容災(zāi),支持全鏈路自動監(jiān)控。近期在做的一個事情是流式的深度學(xué)習(xí),增加實時模型的表達(dá)能力。還有強化學(xué)習(xí)這一塊,探索一些新的應(yīng)用場景。


          2. 多模態(tài)內(nèi)容理解


          ■   簡介

          多模態(tài)就是使用機器學(xué)習(xí)的一些方法去實現(xiàn)或者理解多元模態(tài)信息的能力或者技術(shù)。微博的這塊主要包括圖片、視頻、音頻、文本。

          • 圖片這塊包括,物體識別打標(biāo)簽、OCR、人臉、明星、顏值、智能裁剪。

          • 視頻這塊包括版權(quán)檢測、logo 識別。

          • 音頻這塊有,語音轉(zhuǎn)文本、音頻的標(biāo)簽。

          • 文本主要包括文本的分詞、文本的時效性、文本的分類標(biāo)簽。

          舉個例子,我們一開始做視頻分類的時候只用到了視頻抽幀后的那些幀,也就是圖片。后來第二次優(yōu)化的時候,加入了音頻相關(guān)的東西,還有視頻對應(yīng)的博文相關(guān)的東西,相當(dāng)于把音頻、圖片、文本,多模態(tài)的融合考慮,更精準(zhǔn)的去生成這個視頻的分類標(biāo)簽。


          ■   平臺

          下圖為多模態(tài)內(nèi)容理解的平臺架構(gòu)。中間這部分是 Flink 實時計算,實時的接收圖片流、視頻流、發(fā)博流這些數(shù)據(jù),然后通過模型插件調(diào)用下邊的基礎(chǔ)服務(wù),深度學(xué)習(xí)模型服務(wù)。調(diào)用服務(wù)之后,會返回內(nèi)容特征。然后我們把特征存儲到特征工程,通過數(shù)據(jù)中臺對外提供給各個業(yè)務(wù)方。整個作業(yè)運行過程中全鏈路監(jiān)控報警,異常情況第一時間響應(yīng)。平臺自動提供日志收集,指標(biāo)統(tǒng)計,CASE 追蹤等功能。中間這一塊使用 zk 做服務(wù)發(fā)現(xiàn),解決實時計算和深度學(xué)習(xí)模型之間服務(wù)狀態(tài)同步的問題。另外,除了狀態(tài)同步,也會有一些負(fù)載均衡的策略。最下邊就是使用數(shù)據(jù)-對賬系統(tǒng),進一步提高數(shù)據(jù)處理成功率。


          ■   UI

          多模態(tài)內(nèi)容理解的 UI,主要包括作業(yè)信息、輸入源信息、模型信息、輸出信息、資源配置。這塊通過配置化的開發(fā),去提高開發(fā)效率。然后會自動生成模型調(diào)用的一些監(jiān)控指標(biāo),包括模型調(diào)用的成功率和耗時。當(dāng)作業(yè)提交之后,會自動生成一個用于指標(biāo)統(tǒng)計的作業(yè)。


          3. 內(nèi)容去重服務(wù)


          ■   背景

          在推薦場景下,如果給用戶一直推重復(fù)的內(nèi)容,是很影響用戶體驗的。基于這個考慮,結(jié)合 Flink 實時流計算平臺、分布式向量檢索系統(tǒng)和深度學(xué)習(xí)模型服務(wù)構(gòu)建的一套內(nèi)容去重服務(wù)平臺,具有低延遲、高穩(wěn)定性、高召回率的特點。目前支持多個業(yè)務(wù)方,穩(wěn)定性達(dá)到 99.9+%。


          ■   架構(gòu)

          下圖為內(nèi)容去重服務(wù)的架構(gòu)圖。最下邊是多媒體的模型訓(xùn)練。這塊做離線的訓(xùn)練。比如說我們會拿到一些樣本數(shù)據(jù),然后去做樣本處理,樣本處理完之后把樣本存到樣本庫中去。當(dāng)我需要做模型訓(xùn)練的時候,我從樣本庫中去拉取樣本,然后做模型訓(xùn)練,訓(xùn)練好的結(jié)果會保存到模型庫中去。


          內(nèi)容去重這里主要用到的模型是向量生成模型。包括圖片的向量、文本的向量、視頻的向量。

          當(dāng)我們把訓(xùn)練好的模型驗證沒有問題之后,會把這個模型保存到模型庫中。模型庫保存了模型的一些基礎(chǔ)信息,包括模型的運行環(huán)境、版本。然后需要把模型部署上線,部署的過程需要從模型庫中拉取模型,同時需要知道這個模型的運行的一些技術(shù)環(huán)境。

          模型部署好之后,我們會通過 Flink 實時的從物料庫中讀取物料,然后調(diào)用多媒體預(yù)估服務(wù)去生成這些物料對應(yīng)的向量。然后會把這些向量保存在 Weiss 庫中,它是微博自研的一個向量召回檢索系統(tǒng)。存到 Weiss 庫中之后會對這條物料做向量召回的過程,召回跟這條物料相似的一批物料。在精排比對這塊,會從所有的召回結(jié)果中加上一定的策略,選出最相似的那一條。然后把最相似的這一條跟當(dāng)前物料聚合到一起,形成一個內(nèi)容 ID。最后業(yè)務(wù)去用的時候,也是通過物料對應(yīng)的內(nèi)容 ID 做去重。

          ■   應(yīng)用

          內(nèi)容去重的應(yīng)用場景,主要業(yè)務(wù)場景有三個:

          • 第一,支持視頻版權(quán) - 盜版視頻識別 - 穩(wěn)定性 99.99%,盜版識別率 99.99%。

          • 第二,支持全站微博視頻去重 - 推薦場景應(yīng)用 - 穩(wěn)定性 99.99%,處理延遲秒級。

          • 第三,推薦流物料去重 - 穩(wěn)定性 99%,處理延遲秒級,準(zhǔn)確率達(dá)到 90%


          ■   最后

          我們通過將 Flink 實時流計算框架跟業(yè)務(wù)場景相結(jié)合,在平臺化、服務(wù)化方面做了很大的工作,在開發(fā)效率、穩(wěn)定性方面也做了很多優(yōu)化。我們通過模塊化設(shè)計和平臺化開發(fā),提高開發(fā)效率。目前實時數(shù)據(jù)計算平臺自帶全鏈路監(jiān)控,數(shù)據(jù)指標(biāo)統(tǒng)計和 debug case 追蹤(日志回看)系統(tǒng)。另外,基于 FlinkSQL 在批流一體這塊目前也有一定的應(yīng)用。這些都是 Flink  給我們帶來的一些新的變化,我們會持續(xù)不斷的探索 Flink 在微博中更大的應(yīng)用空間。
          瀏覽 79
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九九九在线观看免费视频 | 最近中文字幕免费MV第一季歌词十 | 国产精品天干综合 | 一區二區三區色 | 欧美自拍视频在线 |