天天看點

Flink 實時計算在微網誌的應用

微網誌機器學習研發中心資料計算負責人,進階系統工程師曹富強為大家帶來 Flink 實時計算在微網誌的應用介紹。内容包括:

1、微網誌介紹

2、資料計算平台介紹

3、Flink 在資料計算平台的典型應用

GitHub 位址

https://github.com/apache/flink

歡迎大家給 Flink 點贊送 star~

一、微網誌介紹

本次給大家帶來的分享是 Flink 實時計算在微網誌的應用。微網誌是中國領先的社交媒體平台,目前的日活躍使用者是 2.41 億,月活躍使用者是 5.5 億,其中移動使用者占比超過了 94%。

Flink 實時計算在微網誌的應用

二、資料計算平台介紹

1. 資料計算平台概況

下圖為資料計算平台的架構圖。

  • 首先是排程,這塊基于 K8s 和 Yarn 分别部署了實時資料處理的 Flink、Storm,以及用于離線處理的 SQL 服務。
  • 在叢集之上,我們部署了微網誌的 AI 平台,通過這個平台去對作業、資料、資源、樣本等進行管理。
  • 在平台之上我們建構了一些服務,通過服務化的方式去支援各個業務方。

    1.實時計算這邊的服務主要包括資料同步、内容去重、多模态内容了解、實時特征生成、實時樣本拼接、流式模型訓練,這些是跟業務關系比較緊密的服務。另外,還支援 Flink 實時計算和 Storm 實時計算,這些是比較通用的基礎計算架構。

    2.離線這部分,結合 Hive 的 SQL,SparkSQL 建構一個 SQL 計算服務,目前已經支援了微網誌内部絕大多數的業務方。

  • 資料的輸出是采用數倉、特征工程這些資料中台的組建,對外提供資料輸出。整體上來說,目前我們線上跑的實時計算的作業将近 1000 多個,離線作業超過了 5000 多個,每天處理的資料量超過了 3 PB。
Flink 實時計算在微網誌的應用

2. 資料計算

下面兩張圖是資料計算,其中一個是實時計算,另外一個是離線計算。

  • 實時計算主要包括實時的特征生成,多媒體特征生成和實時樣本生成,這些跟業務關系比較緊密。另外,也提供一些基礎的 flink 實時計算和 storm 實時計算。
  • 離線計算主要包括 SQL 計算。主要包括 SQL 的即席查詢、資料生成、資料查詢和表管理。表管理主要就是數倉的管理,包括表的中繼資料的管理,表的使用權限,還有表的上下遊的血緣關系。
Flink 實時計算在微網誌的應用

3. 實時特征

如下圖所示,我們基于 Flink 和 Storm 建構了一個實時特征生成的服務。整體上來說,它會分為作業詳情、輸入源特征生成、輸出和資源配置。使用者按照我們事先定義好的接口去開發特征生成的 UDF 就可以。其他的像輸入、特征寫入,都是平台自動提供的,使用者隻需要在頁面上配置就好。另外,平台會提供輸入資料源的監控、作業的異常監控、特征寫入監控、特征讀取監控等,這些都是自動生成的。

Flink 實時計算在微網誌的應用

4. 流批一體

下面介紹我們基于 FlinkSQL 建構的批流一體。首先,我們會統一進制資料,将實時日志跟離線日志通過中繼資料管理平台去統一。統一之後,使用者在送出作業的時候,我們會有一個統一的排程層。排程這一塊,是根據作業的類型,作業的特點,目前叢集的負載的情況,将作業排程到不同的叢集上去。

目前排程層支援的計算引擎主要就是 HiveSQL,SparkSQL 跟 FlinkSQL。Hive 和 Spark 的 SQL 主要用于批量計算,FlinkSQL 是做批流混跑。整個結果會輸出到資料倉庫中,提供給業務方使用。批流一體這塊大概有 4 個關鍵點:

  • 第一,批流代碼統一,提高開發效率。
  • 第二,批流中繼資料統一。統一管理,保證中繼資料一緻。
  • 第三,批流程式混跑,節省資源。
  • 第四,批流統一排程,提高叢集使用率。
Flink 實時計算在微網誌的應用

5. 資料倉庫

  • 針對離線倉庫,我們把資料分成了三層,一個是原始日志,另外一個是中間層,還有一個是資料服務層。中間是中繼資料的統一,下邊是實時數倉。
  • 針對實時數倉,我們通過 FlinkSQL 對這些原始日志做流式的一個 ETL,再通過一個流式彙總将最終的資料結果寫到資料的服務層,同時也會把它存儲到各種實時存儲,比如 ES、Hbase、Redis、ClickHouse 中去。我們可以通過實時存儲對外提供資料的查詢。還提供資料進一步資料計算的能力。也就是說,建立實時數倉主要是去解決離線特征生成的周期長的問題。另外就是使用 FlinkSQL 去解決 streaming 作業開發周期比較長的問題。其中的一個關鍵點還是離線數倉跟實時數倉的中繼資料的管理。
Flink 實時計算在微網誌的應用

三、Flink 在資料計算平台的典型應用

1. 流式機器學習

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

  • 特征實時化主要是為了更及時的去回報使用者行為,更細粒度的去刻畫使用者。
  • 模型實時化是要根據線上樣本實時訓練模型,及時反映對象的線上變化情況。
Flink 實時計算在微網誌的應用

■ 微網誌流式機器學習的特點:

  • 樣本的規模大,目前的實時樣本能達到百萬級别的 qps。
  • 模型的規模大。模型訓練參數這塊,整個架構會支援千億級别的訓練規模。
  • 對作業的穩定性要求比較高。
  • 樣本的實時性要求高。
  • 模型的實時性高。
  • 平台業務需求多。

■ 流式機器學習有幾個比較難的問題:

  • 一個就是全鍊路,端到端的鍊路是比較長的。比如說,一個流式機器學習的流程會從日志收集開始,到特征生成,再到樣本生成,然後到模型訓練,最終到服務上線,整個流程非常長。任何一個環節有問題,都會影響到最終的使用者體驗。是以我們針對每一個環節都部署了一套比較完善的全鍊路的監控系統,并且有比較豐富的監控名額。
  • 另外一個是它的資料規模大,包括海量的使用者日志,樣本規模和模型規模。我們調研了常用的實時計算架構,最終選擇了 Flink 去解決這個問題。
Flink 實時計算在微網誌的應用

■ 流失機器學習流程:

  • 首先是離線訓練,我們拿到離線日志,去離線的生成樣本之後,通過Flink去讀取樣本,然後去做離線訓練。訓練完成之後把這些訓練的結果參數儲存在離線的參數伺服器中。這個結果會作為模型服務的 Base 模型,用于實時的冷啟動。
  • 然後是實時的流式機器學習的流程。我們會去拉取實時的日志,比如說微網誌的釋出内容,互動日志等。拉取這些日志之後,使用 Flink 去生成它的樣本,然後做實時的訓練。訓練完成之後會把訓練的參數儲存在一個實時的參數伺服器中,然後會定期的從實時的參數伺服器同步到實時的參數伺服器中。
  • 最後是模型服務這一塊,它會從參數服務中拉取到模型對應的那些參數,去推薦使用者特征,或者說物料的特征。通過模型對使用者和物料相關的特征、行為打分,然後排序服務會調取打分的結果,加上一些推薦的政策,去選出它認為最适合使用者的這一條物料,并回報給使用者。使用者在用戶端産生一些互動行為之後,又發出新的線上請求,産生新的日志。是以整個流式學習的流程是一個閉環的流程。

另外,

  • 離線的樣本的延時和模型的更新是天級或者小時級,而流式則達到了小時級或者分鐘級;
  • 離線模型訓練的計算壓力是比較集中的,而實時的計算壓力比較分散。
Flink 實時計算在微網誌的應用

■ 樣本

這裡簡單介紹一下我們流式機器學習樣本的發展曆程。2018 年 10 月,我們上線了第一個流式樣本作業,是通過 Storm 和外部存儲 Redis 去做的。2019 年 5 月,我們使用新的實時計算架構 Flink,采用 union+timer 方案替代 window 計算來實作多個資料流的 join 操作。2019 年 10月,上線了一個xx樣本作業,單個作業的 qps 達到了幾十萬。在今年 4 月份,把樣本生成流程平台化。到今年 6 月份,平台化做了一個疊代,支援樣本的落盤,包括樣本庫,還有樣本的各種監控名額的完善。

Flink 實時計算在微網誌的應用

流式機器學習所謂的樣本生成,其實就是多個資料流按照相同的 key 做一個拼接。比如說,我們有三個資料流,資料清洗後的結果存儲為 , k 是聚合的 key,v 是樣本中需要的值。資料 union 後做 KeyBy 聚合,聚合後将資料存儲在記憶體區域 value state 中。如下圖所示:

  • 如果 k1 不存在,則注冊 timer,再存到 state 中。
  • 如果 k1 存在,就從 state 中把它給拿出來,更新之後再存進去。到最後它的 timer 到期之後,就會将這條資料輸出,并且從 state 中清除掉。
Flink 實時計算在微網誌的應用

■ 樣本平台

我們把整個樣本拼接的過程做了一個平台化的操作,分成了 5 個子產品,包括輸入、資料清洗、樣本拼接、樣本的格式化和輸出。基于平台化開發,使用者隻需要關心業務邏輯部分即可。需要使用者開發的有:

  • 對應輸入資料的資料清洗邏輯。
  • 樣本輸出前的資料格式化邏輯。

其餘的在UI上配置即可實作,具體有:

  • 樣本拼接的時間視窗。
  • 視窗内對字段的聚合操作。

資源由平台方稽核并配置。另外,整個平台提供基礎的一些監控,包括輸入資料的監控、樣本名額的監控、作業異常監控、樣本輸出量的監控。

Flink 實時計算在微網誌的應用

■ 流式機器學習項目的樣本 UI

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

Flink 實時計算在微網誌的應用

■ 流失機器學習的應用

最後介紹一下流式機器學習應用的效果。目前我們支援實時樣本拼接,QPS 達到百萬級别。支援流式模型訓練,可以同時支援幾百個模型訓練,模型實時性支援小時級/分鐘級 模型更新。流式學習全流程容災,支援全鍊路自動監控。近期在做的一個事情是流式的深度學習,增加實時模型的表達能力。還有強化學習這一塊,探索一些新的應用場景。

Flink 實時計算在微網誌的應用

2. 多模态内容了解

■ 簡介

多模态就是使用機器學習的一些方法去實作或者了解多元模态資訊的能力或者技術。微網誌的這塊主要包括圖檔、視訊、音頻、文本。

  • 圖檔這塊包括,物體識别打标簽、OCR、人臉、明星、顔值、智能裁剪。
  • 視訊這塊包括版權檢測、logo 識别。
  • 音頻這塊有,語音轉文本、音頻的标簽。
  • 文本主要包括文本的分詞、文本的時效性、文本的分類标簽。

舉個例子,我們一開始做視訊分類的時候隻用到了視訊抽幀後的那些幀,也就是圖檔。後來第二次優化的時候,加入了音頻相關的東西,還有視訊對應的博文相關的東西,相當于把音頻、圖檔、文本,多模态的融合考慮,更精準的去生成這個視訊的分類标簽。

Flink 實時計算在微網誌的應用

■ 平台

下圖為多模态内容了解的平台架構。中間這部分是 Flink 實時計算,實時的接收圖檔流、視訊流、發博流這些資料,然後通過模型插件調用下邊的基礎服務,深度學習模型服務。調用服務之後,會傳回内容特征。然後我們把特征存儲到特征工程,通過資料中台對外提供給各個業務方。整個作業運作過程中全鍊路監控報警,異常情況第一時間響應。平台自動提供日志收集,名額統計,CASE 追蹤等功能。中間這一塊使用 zk 做服務發現,解決實時計算和深度學習模型之間服務狀态同步的問題。另外,除了狀态同步,也會有一些負載均衡的政策。最下邊就是使用資料-對賬系統,進一步提高資料處理成功率。

Flink 實時計算在微網誌的應用

■ UI

多模态内容了解的 UI,主要包括作業資訊、輸入源資訊、模型資訊、輸出資訊、資源配置。這塊通過配置化的開發,去提高開發效率。然後會自動生成模型調用的一些監控名額,包括模型調用的成功率和耗時。當作業送出之後,會自動生成一個用于名額統計的作業。

Flink 實時計算在微網誌的應用

3. 内容去重服務

■ 背景

在推薦場景下,如果給使用者一直推重複的内容,是很影響使用者體驗的。基于這個考慮,結合 Flink 實時流計算平台、分布式向量檢索系統和深度學習模型服務建構的一套内容去重服務平台,具有低延遲、高穩定性、高召回率的特點。目前支援多個業務方,穩定性達到 99.9+%。

Flink 實時計算在微網誌的應用

■ 架構

下圖為内容去重服務的架構圖。最下邊是多媒體的模型訓練。這塊做離線的訓練。比如說我們會拿到一些樣本資料,然後去做樣本處理,樣本處理完之後把樣本存到樣本庫中去。當我需要做模型訓練的時候,我從樣本庫中去拉取樣本,然後做模型訓練,訓練好的結果會儲存到模型庫中去。

Flink 實時計算在微網誌的應用

内容去重這裡主要用到的模型是向量生成模型。包括圖檔的向量、文本的向量、視訊的向量。

當我們把訓練好的模型驗證沒有問題之後,會把這個模型儲存到模型庫中。模型庫儲存了模型的一些基礎資訊,包括模型的運作環境、版本。然後需要把模型部署上線,部署的過程需要從模型庫中拉取模型,同時需要知道這個模型的運作的一些技術環境。

模型部署好之後,我們會通過 Flink 實時的從物料庫中讀取物料,然後調用多媒體預估服務去生成這些物料對應的向量。然後會把這些向量儲存在 Weiss 庫中,它是微網誌自研的一個向量召回檢索系統。存到 Weiss 庫中之後會對這條物料做向量召回的過程,召回跟這條物料相似的一批物料。在精排比對這塊,會從所有的召回結果中加上一定的政策,選出最相似的那一條。然後把最相似的這一條跟目前物料聚合到一起,形成一個内容 ID。最後業務去用的時候,也是通過物料對應的内容 ID 做去重。

■ 應用

内容去重的應用場景,主要業務場景有三個:

  • 第一,支援視訊版權 - 盜版視訊識别 - 穩定性 99.99%,盜版識别率 99.99%。
  • 第二,支援全站微網誌視訊去重 - 推薦場景應用 - 穩定性 99.99%,處理延遲秒級。
  • 第三,推薦流物料去重 - 穩定性 99%,處理延遲秒級,準确率達到 90%
Flink 實時計算在微網誌的應用

■ 最後

我們通過将 Flink 實時流計算架構跟業務場景相結合,在平台化、服務化方面做了很大的工作,在開發效率、穩定性方面也做了很多優化。我們通過子產品化設計和平台化開發,提高開發效率。目前實時資料計算平台自帶全鍊路監控,資料名額統計和 debug case 追蹤(日志回看)系統。另外,基于 FlinkSQL 在批流一體這塊目前也有一定的應用。這些都是 Flink 給我們帶來的一些新的變化,我們會持續不斷的探索 Flink 在微網誌中更大的應用空間。

更多 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
Flink 實時計算在微網誌的應用