知乎用戶畫像與實時數倉的架構與實踐

用戶畫像與實時數據分析是互聯網企業的數據核心。知乎數據賦能團隊以 Apache Doris 爲基礎,基於雲服務構建高響應、低成本、兼顧穩定性與靈活性的實時數據架構,同時支持實時業務分析、實時算法特徵、用戶畫像三項核心業務流,顯著提升對於時效性熱點與潛力的感知力度與響應速度,大幅縮減運營、營銷等業務場景中的人羣定向成本,並對實時算法的準確率及業務核心指標帶來明顯增益。

關鍵詞: 數據倉庫,Apache Doris,用戶畫像,實時數據

01 前言

知乎業務中,隨着各業務線業務的發展,逐漸對用戶畫像和實時數據這兩部分的訴求越來越多。對用戶畫像方面,期望有更快、更準、更方便的人羣篩選工具和方便的用戶羣體分析能力。對於實時數據方面,期望擁有可以實時響應的用戶行爲流,同時在算法特徵、指標統計、業務外顯等業務場景有愈來愈多的數據實時化的訴求。

在 2021 年 8 月,知乎平臺團隊成立數據賦能團隊。針對歷史實時數據需求無承接方的現象,已有用戶畫像系統無法滿足多樣的人羣定向的現狀,及業務方進一步人羣分析的業務訴求,提出基礎設施層選用 Apache Doris 作爲實時數據倉庫技術選型,業務工具層建設實時數據集成、實時數據調度、實時數據質量中心等系統,應用層建設實時數據應用和用戶畫像應用的方案。該方案針對性地解決了業務痛點,滿足了業務訴求。

拆分當前業務主要在實時數據和用戶畫像兩大部分有難點,共包含如下的三個方向目標:

1、實時業務數據

2、 實時算法特徵

3、用戶畫像

本文就知乎平臺的數據賦能團隊,基於以上三個方向的目標,就這四個問題,來逐一介紹這方面的技術實踐經驗和心得體會:

1.1 名詞解釋

gKzYOE

1.2 實時數據與用戶畫像與各業務的結合

02 面臨的挑戰和痛點

針對當前業務目標,主要有以下幾個具體要求。

1、有價值

1)如何通過實效性發現業務價值?

2)如何讓用戶畫像的篩選和分析能力最大化?

2、 數據實效性

1)推薦頁首屏瀏覽 6 條內容,如何在第二刷的時候就立即感知到最新的用戶行爲?

通過 UBS 建設提升實效性(下面介紹)

2)在推薦算法中,非常實時的特徵推薦算法效果要比天級別更新特徵的算法效果好很多,如何保證 10 分鐘內算法受到特徵變更?

通過實時數據系統與 Apache Doris 配合共同建設,提升到 10 分鐘內更新(下面介紹)

3、接口實時性

熱點運營場景,期望用戶畫像服務能在秒級別快速篩選出大量人羣,用戶後續的推送等運營場景,如何解決?

通過用戶畫像系統與 Apache Doris 配合共同建設,提升人羣篩選的速度(下面介紹)

4、複雜性

1)實時數據幾乎沒有 count、sum 需求。幾乎都是複雜去重和多數據聯合計算的情況。

以播放量爲例。在啓播、暫停、完播、心跳等多個條件下,會同時有多個點,要進行去重。同時基於視頻回答、視頻的關係和雙作者聯合創作的關係,需要疊加,同時保證在父子內容異常狀態的情況下過濾其中部分播放行爲。

2)人羣分析業務,期望多角度、各維度進行人羣關聯計算,同時基於全部用戶特徵針對當前人羣和對比人羣進行 TGI 計算,篩選出顯著特徵,如何解決?

通過用戶畫像系統與 Apache Doris 配合共同建設,解決複雜的人羣分析(下面介紹)

3)業務數據中有增 / 刪 / 改邏輯,如何實時同步?

實時數據集成系統與 Apache Doris 配合共同建設,解決增 / 刪 / 改邏輯(下面介紹)

4)明細數據異常發現滯後,異常發現後,需要針對性修正構建方式,及回溯數據修復,如何解決?

通過選擇 Lambda 架構作爲數據架構解決(下面介紹)

03 實踐及經驗分享

3.1 整體業務架構

基於當前的業務,從頂層至底層進行了拆分。主要分爲應用層、業務模型層、業務工具層、基礎設施層。基於我們當前的業務形態,自上而下

3.2 實時數據的數據架構選型

解決當前問題的數據架構,一般有 Lambda 架構和 Kappa 架構。針對當前業務特點,計算複雜、偶發的異常問題需要大數據量回溯等特性。當前實時數據的數據架構採用的是 Lambda 架構。由 Doris 承載分鐘級的批處理,Flink 來承載秒級別簡單邏輯的流處理。具體如下:

3.3 應用層建設經驗分享

3.3.1 實時數據系統

01 業務場景

實時數據系統主要有兩個大方向:實時業務數據和實時算法特徵。

(1)實時業務數據。

(2)實時算法特徵。

以實時數據爲基礎,提供多樣的實時算法特徵,與推薦算法團隊共同提升 DAU、留存、用戶付費等核心指標。

02  面臨的困難

(1)  依賴數據源多,計算規則複雜。以我們的播放量計算爲例:

(2)  時間敏感性高

以算法特徵爲例,用戶瀏覽某內容後,針對後續關聯的一系列計算後,需要在一定時間內產出計算結果(10min 未產出後續推薦效果會有波動,26min 該特徵的效果會降爲 0)

(3)  調度過程中協調成本高

03 解決方案

(1) 搭建實時數據基座,建設相應的數據模型,降低建設成本。

(2)針對依賴數據衆多、計算規則複雜、質量難以保證等問題。通過建設工具降低解決問題的成本。

(3)時間敏感性高,加強監控、與 Doris 集羣共同提升吞吐效率和計算效率:

3.3.2 用戶畫像系統 DMP

01 業務場景

用戶畫像系統主要有兩大功能:用戶檢索和用戶分析。

(1)用戶檢索。
重點在於快速完成人羣包圈選同時在圈選條件變更過程中,需要快速計算出預計能圈的用戶有哪些?

(2)用戶分析。
重點在於多人羣包的各個維度對比分析,通過分析結論找到最明顯的用戶特徵(通過 TGI 值判斷)

02 面臨的困難

(1)數據規模大。
我們當前是 200+ 個標籤,每個標籤均有不同的枚舉值,總計有 300+ 萬的 tag。tag 對用戶的打標量級在 900+ 億條記錄。由於標籤每日更新導入量級十分大。

(2)篩選響應時間要求高。

針對簡單的篩選,要求在秒級別出結果,針對複雜的人羣篩選,篩選後人羣量大的情況,要求在 20s 內完成人羣包生成。

(3)人羣包除了 long 類型的用戶 id 外,還需要有多種不同的設備 id 和設備 id  md5 作爲篩選結果。

(4)用戶分析場景下,針對 300+ 萬 tag 的多人羣交叉 TGI 計算,需要在 10min 內完成。

03 解決方案

(1)DMP 業務架構

(2)DMP 業務流程:

(3)性能問題針對性解決;數據規模大,提升導入性能,分而治之。

(4)提升人羣篩選和人羣分析的計算速度,分而治之。

04 效果

上線後,接入了知乎多個主要場景的業務,支持多業務方的人羣定向和分析能力。爲業務帶來曝光量、轉化率等直接指標的提升。

同時在工具性能上,有如下表現:

05  待提升

(1)功能擴展

(2)性能提升

    後續結果由行列轉換後,用戶畫像結果處理流程中會將設備 id 獲取方式通過 join 維度表來實現,人羣縮減通過 order by rand limit 來實現,會有比較明顯的性能提升。

    後續可以直接讀取 bitmap 後,業務邏輯中會替換爲直接獲取 bitmap,會極大程度的減少數據傳輸量,同時業務邏輯可以針對性緩存。* 針對人羣預估邏輯,當前是通過例如 bitmap_count(bitmap_and) 兩個函數完成的,後續 Doris 會提供 bitmap_and_count 合併爲一個函數,替換後可提升計算效率。

 

3.4 工具層建設經驗分享

3.4.1 數據集成

01 業務場景

“巧婦難爲無米之炊”,沒有數據也就沒有後面的一切,數據採集作爲基礎至關重要。Doris 數據倉庫自帶的多種數據導入方式 對於數據入倉非常便利,但是在我們的使用過程中也遇到了一些問題。比如:

(1)在從離線數倉進行 broker load 的時候數據依賴丟失,上游數據錯誤無法評估受影響的範圍。

(2)需要編寫冗長的 etl 處理邏輯代碼,小的操作變更流程很長,需要全流程(至少 30 分鐘)的上線操作;此外每次部署操作還有可能遇到各種初始化 MQ 消費者的問題

(3)缺少運行狀態監控,出現異常問題無法在分鐘甚至小時級別的時間發現;

(4)在線導入僅支持 kafka json,上游的 pulsar、protobuf 數據仍需要代碼開發進行轉發,導致每次接入數據都需要轉換函數的開發以及同樣全流程的上線操作;

(5)業務邏輯中,期望業務是什麼樣,Doris 中的數據就是什麼樣,讓業務無感知。這種全增量同步期望被包住,而不是做很多配置或開發很多代碼來實現。

02 解決方案

在建設實時數據模型的過程中。需要依賴衆多業務的數據,同時需要針對數據逐層建設數據模型。摸索並搭建了實時數據集成系統和實時調度系統,並下沉到工具層。

(1)實時數據集成。建設快速且自定義的配置,針對不同的數據源建設導入能力。

(2)與 Doris 的 Broker Load 和 Routine Load 進行配合,在此基礎上搭建針對業務的全增量同步。

(3)封裝集成能力對內部暴露的接口,業務層無需理解中間過程,只選擇同步的數據庫和數據表即可進行實時同步。

03  效果

(1)同步配置

(2)同步任務

(3)上線前

(4)上線後

3.4.2 數據調度

01 業務場景

我們在初期通過 Doris 建設實時數據的過程中,是通過 Routine Load 後的數據,再定時任務執行後續計算邏輯,後再將計算結果導出到承載存儲,如 Redis、Zetta(知乎自研 HBase 協議) 中完成外部壓力承載。在這個過程中遇到了如下問題:

(1)依賴未就緒後續任務就執行。如最近 24 小時的曝光,在 15:05 運行昨日 15:00 至今日 15:00 的查詢。此時如果 Routine Load 僅導入到 14:50 的數據,這次執行結果異常;

(2)Doris 資源有限,但很多任務都是某些整點整分鐘的,一次性大量的計算任務造成集羣崩潰;

(3) 任務是否執行成功,任務是否延遲,是否影響到業務,無報警無反饋;

(4) 導出存儲過程通用,重複代碼開發,每次都需要 0.5 - 1 人天的時間開發寫入和業務接口。

02    解決方案

(1)架構圖

(2)流程圖

03 效果

(1)同步任務

(2)收益

3.4.3 數據質量

01 業務場景

數據,已經成爲互聯網企業非常依賴的重要資產。數據質量的好壞直接關係到信息的精準度,也影響到企業的生存和競爭力。Michael Hammer(《Reengineering the Corporation》一書的作者)曾說過,看起來不起眼的數據質量問題,實際上是拆散業務流程的重要標誌。數據質量管理是測度、提高和驗證質量,以及整合組織數據的方法等一套處理準則,而體量大、速度快和多樣性的特點,決定了大數據質量所需的處理,有別於傳統信息治理計劃的質量管理方式。

具體到針對知乎的各個業務:

AI 平臺、增長團隊、內容平臺等已經將部分或全部業務漸漸遷移到實時計算平臺,在接入數據更實時,更迅速的接入帶來的所享受的收益外,數據質量更加變得重要。

 

(1)完整性:
數據完整性問題包括:模型設計不完整,例如:唯一性約束不完整、參照不完整;數據條目不完整,例如:數據記錄丟失或不可用;數據屬性不完整,例如:數據屬性空值。不完整的數據所能借鑑的價值就會大大降低,也是數據質量問題最爲基礎和常見的一類問題;

(2)一致性: 
多源數據的數據模型不一致,例如:命名不一致、數據結構不一致、約束規則不一致。數據實體不一致,例如:數據編碼不一致、命名及含義不一致、分類層次不一致、生命週期不一致…… 相同的數據有多個副本的情況下的數據不一致、數據內容衝突的問題;

(3)準確性:
準確性也叫可靠性,是用於分析和識別哪些是不準確的或無效的數據,不可靠的數據可能會導致嚴重的問題,會造成有缺陷的方法和糟糕的決策;

(4)唯一性:
用於識別和度量重複數據、冗餘數據。重複數據是導致業務無法協同、流程無法追溯的重要因素,也是數據治理需要解決的最基本的數據問題;

(5)關聯性:
數據關聯性問題是指存在數據關聯的數據關係缺失或錯誤,例如:函數關係、相關係數、主外鍵關係、索引關係等。存在數據關聯性問題,會直接影響數據分析的結果,進而影響管理決策;

(6)真實性:
 數據必須真實準確的反映客觀的實體存在或真實的業務,真實可靠的原始統計數據是企業統計工作的靈魂,是一切管理工作的基礎,是經營者進行正確經營決策必不可少的第一手資料;

(7)及時性:
數據的及時性是指能否在需要的時候獲到數據,數據的及時性與企業的數據處理速度及效率有直接的關係,是影響業務處理和管理效率的關鍵指標。

02 解決方案

(1)全流程的數據鏈路和各級質量保證方法

 

(2)業務架構

(3)業務流程

 

03 效果

(1)某業務健康情況監控

以通過 DQC 監控的某一個業務的健康情況,該業務由多個導出任務和中間計算任務及部分數據源組成,當前情況是一切正常。期間如果出現某節點任意異常後,都可及時發現。

(2)某任務中間邏輯監控

 該任務中間計算中其中部分規則未達標,導致該任務未通過。

04 收益

(1)上線前

(2)上線後

04 總結和展望

4.1 收益總結

4.1.1 業務發展方面

01  針對實時業務數據

02  針對實時算法特徵

03  針對用戶畫像

4.1.2 工具建設方面

4.1.3 人員組織方面

4.2 未來展望

從 2021 年 8 月成立至今,我們一直思考如何提供更好的實時數據服務?實時數據能建設什麼方面的應用,爲業務創造價值?如何將用戶畫像服務做好?用戶畫像服務的篩選、分析能力如何爲業務創造更大價值?摸着石頭過河的同時,我們也在不斷摸索和建設相關的業務能力和基礎建設。在明年的發展中,我們還會針對以下方面進一步發展:

01 基於實時數據

02 基於用戶畫像

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/jK1aZMNdAtfvgg3Xj94zoA