亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flink在快手實時多維分析場景的應用是什么

發布時間:2022-01-04 15:19:20 來源:億速云 閱讀:150 作者:柒染 欄目:大數據

Flink在快手實時多維分析場景的應用是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。


Flink 在快手應用場景及規模


首先看 Flink 在快手的應用場景和規模。

1. 快手應用場景

Flink在快手實時多維分析場景的應用是什么  

快手計算鏈路是從 DB/Binlog 以及 WebService Log 實時入到 Kafka 中,然后接入 Flink 做實時計算,其中包括實時數倉、實時分析以及實時訓練,最后的結果存到 Druid、Kudu、HBase 或者 ClickHouse 里面;同時 Kafka 數據實時 Dump 一份到 Hadoop 集群,然后通過 Hive、MapReduce 或者 Spark 來做離線計算;最終實時計算和離線計算的結果數據會用內部自研 BI 工具 KwaiBI 來展現出來。

Flink在快手實時多維分析場景的應用是什么

Flink 在快手典型的應用場景主要分為三大類:

  • 80% 統計監控 :實時統計,包括各項數據的指標,監控項報警,用于輔助業務進行實時分析和監控;
  • 15% 數據處理 :對數據的清洗、拆分、Join 等邏輯處理,例如大 Topic 的數據拆分、清洗;
  • 5% 數據處理 :實時業務處理,針對特定業務邏輯的實時處理,例如實時調度。

Flink在快手實時多維分析場景的應用是什么

Flink 在快手應用的典型場景案例包括:

  • 快手是分享短視頻跟直播的平臺,快手短視頻、直播的質量監控是通過 Flink 進行實時統計,比如直播觀眾端、主播端的播放量、卡頓率、開播失敗率等跟直播質量相關的多種監控指標;
  • 用戶增長分析 ,實時統計各投放渠道拉新情況,根據效果實時調整各渠道的投放量;
  • 實時數據處理 ,廣告展現流、點擊流實時 Join,客戶端日志的拆分等;
  • 直播 CDN 調度 ,實時監控各 CDN 廠商質量,通過 Flink 實時訓練調整各個 CDN 廠商流量配比。

2. Flink 集群規模

Flink在快手實時多維分析場景的應用是什么

快手目前集群規模有 1500 臺左右,日處理條目數總共有3萬億,峰值處理條目數大約是 3億/s 左右。集群部署都是 On Yarn 模式,實時集群和離線集群混合部署,通過 Yarn 標簽進行物理隔離,實時集群是 Flink 專用集群,針對隔離性、穩定性要求極高的業務部署。注:本文所涉及數據僅代表嘉賓分享時的數據。

快手實時多維分析平臺


此處重點和大家分享下快手的實時多維分析平臺。

1. 快手實時多維分析場景

Flink在快手實時多維分析場景的應用是什么

快手內部有這樣的應用場景,每天的數據量在百億級別,業務方需要在數據中任選五個以內的維度組合進行全維的建模進而計算累計的 PV ( Page View 訪問量 )、UV ( Unique Visitor 獨立訪客 )、新增或者留存等這樣的指標,然后指標的計算結果要實時進行圖形化報表展示供給業務分析人員進行分析。

2. 方案選型

Flink在快手實時多維分析場景的應用是什么

現在社區已經有一些 OLAP 實時分析的工具,像 Druid 和 ClickHouse;目前快手采用的是 Flink+Kudu 的方案,在前期調研階段對這三種方案從計算能力、分組聚合能力、查詢并發以及查詢延遲四個方面結合實時多維查詢業務場景進行對比分析:

  • 計算能力方面 :多維查詢這種業務場景需要支持 Sum、Count 和 count distinct 等能力,而 Druid 社區版本不支持 count distinct,快手內部版本支持數值類型、但不支持字符類型的 count distinct;ClickHouse 本身全都支持這些計算能力;Flink 是一個實時計算引擎,這些能力也都具備。
  • 分組聚合能力方面 :Druid 的分組聚合能力一般,ClickHouse 和 Flink 都支持較強的分組聚合能力。
  • 查詢并發方面 :ClickHouse 的索引比較弱,不能支持較高的查詢并發,Druid 和 Flink 都支持較高的并發度,存儲系統 Kudu,它也支持強索引以及很高的并發。
  • 查詢延遲方面 :Druid 和 ClickHouse 都是在查詢時進行現計算,而 Flink+Kudu 方案,通過 Flink 實時計算后將指標結果直接存儲到 Kudu 中,查詢直接從 Kudu 中查詢結果而不需要進行計算,所以查詢延遲比較低。

Flink在快手實時多維分析場景的應用是什么

采用 Flink+Kudu 的方案主要思想是借鑒了 Kylin 的思路,Kylin 可以指定很多維度和指標進行離線的預計算然后將預計算結果存儲到 Hbase 中;快手的方案是通過 Flink 實時計算指標,再實時地寫到 Kudu 里面。

3. 方案設計

Flink在快手實時多維分析場景的應用是什么

實時多維分析的整體的流程為:

  • 用戶在快手自研的 BI 分析工具 KwaiBI 上配置 Cube 數據立方體模型,指定維度列和指標列以及基于指標做什么樣的計算;

  • 配置過程中選擇的數據表是經過處理過后存儲在實時數倉平臺中的數據表;

  • 然后根據配置的計算規則通過 Flink 任務進行建模指標的預計算,結果存儲到 Kudu 中;

  • 最后 KwaiBI 從 Kudu 中查詢數據進行實時看板展示。


接下來詳細介紹一下實時多維分析的主要模塊。

■ 數據預處理

Flink在快手實時多維分析場景的應用是什么

KwaiBI 配置維度建模時選擇的數據表,是經過提前預處理的:

  • 首先內部有一個元信息系統,在元信息系統中提供統一的 schema 服務,所有的信息都被抽象為邏輯表;
  • 例如 Kafka 的 topic、Redis、Hbase 表等元數據信息都抽取成 schema 存儲起來;
  • 快手 Kafka 的物理數據格式大部分是 Protobuf 和 Json 格式,schema 服務平臺也支持將其映射為邏輯表;
  • 用戶只需要將邏輯表建好之后,就可以在實時數倉對數據進行清洗和過濾。

■ 建模計算指標

Flink在快手實時多維分析場景的應用是什么

數據預處理完成后,最重要的步驟是進行建模指標計算,此處支持 Cube、GroupingSet 方式維度組合來計算小時或者天累計的 UV ( Unique Visitor )、新增和留存等指標,可以根據用戶配置按固定時間間隔定期輸出結果;維度聚合邏輯中,通過逐層降維計算的方式會讓 DAG 作業圖十分復雜,如上圖右上角模型所示;因此快手設計了兩層降維計算模型,分為全維度層和剩余維度層,這樣既利用了全維度層的聚合結果又簡化了 DAG 作業圖。

Flink在快手實時多維分析場景的應用是什么

以 UV 類指標計算舉例,兩個黃色虛線框分別對應兩層計算模塊:全維計算和降維計算。

  • 全維計算分為兩個步驟,為避免數據傾斜問題,首先是維度打散預聚合,將相同的維度值先哈希打散一下。因為 UV 指標需要做到精確去重,所以采用 Bitmap 進行去重操作,每分鐘一個窗口計算出增量窗口內數據的 Bitmap 發送給第二步按維度全量聚合;在全量聚合中,將增量的 Bitmap 合并到全量 Bitmap 中最終得出準確的 UV 值。然而有人會有問題,針對用戶 id 這種的數值類型的可以采用此種方案,但是對于 deviceid 這種字符類型的數據應該如何處理?實際上在源頭,數據進行維度聚合之前,會通過字典服務將字符類型的變量轉換為唯一的 Long 類型值,進而通過 Bitmap 進行去重計算 UV。
  • 降維計算中,通過全維計算得出的結果進行預聚合然后進行全量聚合,最終將結果進行輸出。

Flink在快手實時多維分析場景的應用是什么

再重點介紹下,建模指標計算中的幾個關鍵點。在建模指標計算中,為了避免維度數據傾斜問題,通過預聚合 ( 相同維度 hash 打散 ) 和全量聚合 ( 相同維度打散后聚合 ) 兩種方式來解決。

為了解決 UV 精確去重問題,前文有提到,使用 Bitmap 進行精確去重,通過字典服務將 String 類型數據轉換成 Long 類型數據進而便于存儲到 Bitmap 中,因為統計 UV 要統計歷史的數據,比如說按天累計,隨著時間的推移,Bitmap 會越來越大,在 Rocksdb 狀態存儲下,讀寫過大的 KV 會比較耗性能,所以內部自定義了一個 BitmapState,將 Bitmap 進行分塊存儲,一個 blockid 對應一個局部的 bitmap,這樣在 RocksDB 中存儲時,一個 KV 會比較小,更新的時候也只需要根據 blockid 更新局部的 bitmap 就可以而不需要全量更新。

Flink在快手實時多維分析場景的應用是什么

接下來,看新增類的指標計算,和剛剛 UV 的不同點是需要判斷是否為新增用戶,通過異步地訪問外部的歷史用戶服務進行新增用戶判斷,再根據新增用戶流計算新增 UV,這塊計算邏輯和 UV 計算一致。

Flink在快手實時多維分析場景的應用是什么

然后,再來看留存類指標計算,與 UV 計算不同的時候,不僅需要當天的數據還需要前一天的歷史數據,這樣才能計算出留存率,內部實現的時候是采用雙 buffer state 存儲,在計算的時候將雙 buffer 數據相除就可以計算出留存率。

■ Kudu 存儲  

Flink在快手實時多維分析場景的應用是什么

最后經過上面的計算邏輯后,會將結果存儲到 Kudu 里面,其本身具有低延遲隨機讀寫以及快速列掃描等特點,很適合實時交互分析場景;在存儲方式上,首先對維度進行編碼,然后按時間+維度組合+維度值組合作為主鍵,最終按維度組合、維度值組合、時間進行分區,這樣有利于提高查詢的效率快速獲取到數據。

4. KwaiBI 展示

Flink在快手實時多維分析場景的應用是什么

界面為配置 Cube 模型的截圖,配置一些列并指定類型,再通過一個 SQL 語句來描述指標計算的邏輯,最終結果也會通過 KwaiBI 展示出來。


SlimBase-更省 IO、嵌入式共享 state 存儲


接下來介紹一種比 RocksDB 更省 IO、嵌入式的共享 state 存儲引擎:SlimBase。

1. 面臨的挑戰

Flink在快手實時多維分析場景的應用是什么
首先看一下 Flink 使用 RocksDB 遇到的問題,先闡述一下快手的應用場景、廣告展現點擊流實時 Join 場景:打開快手 App 可能會收到廣告服務推薦的廣告視頻,用戶可能會點擊展現的廣告視頻。

這樣的行為在后端會形成兩份數據流,一份是廣告展現日志,一份是客戶端點擊日志。這兩份數據進行實時 Join,并將 Join 結果作為樣本數據用于模型訓練,訓練出的模型會被推送到線上的廣告服務。

該場景下展現以后20分鐘的點擊被認為是有效點擊,實時 Join 邏輯則是點擊數據 Join 過去20分鐘內的展現。其中,展現流的數據量相對比較大,20分鐘數據在 1TB 以上。檢查點設置為五分鐘,Backend 選擇 RocksDB。

Flink在快手實時多維分析場景的應用是什么

在這樣的場景下,面臨著磁盤 IO 開銷70%,其中50%開銷來自于 Compaction;在 Checkpoint 期間,磁盤 IO 開銷達到了100%,耗時在1~5分鐘,甚至會長于 Checkpoint 間隔,業務能明顯感覺到反壓。經過分析找出問題:

  • 首先,在 Checkpoint 期間會產生四倍的大規模數據拷貝,即:從 RocksDB 中全量讀取出來然后以三副本形式寫入到 HDFS 中;
  • 其次,對于大規模數據寫入,RocksDB 的默認 Level Compaction 會有嚴重的 IO 放大開銷。

2. 解決方案

Flink在快手實時多維分析場景的應用是什么

由于出現上文闡述的問題,開始尋找解決方案,整體思路是在數據寫入時直接落地到共享存儲中,避免 Checkpoint 帶來的數據拷貝問題。手段是嘗試使用更省 IO 的 Compaction,例如使用 SizeTieredCompation 方式,或者利用時序數據的特點使用并改造 FIFOCompaction。綜合比較共享存儲、SizeTieredCompation、基于事件時間的 FIFOCompaction 以及技術棧四個方面得出共識:HBase 代替 RocksDB 方案。

  • 共享存儲方面,HBase 支持, RocksDB 不支持
  • SizeTieredCompation 方面,RocksDB 默認不支持,HBase 默認支持
  • 基于事件時間下推的 FIFOCompaction 方面,RocksDB 不支持,但 HBase 開發起來比較簡單
  • 技術棧方面,RocksDB 使用 C++,HBase 使用 java,HBase 改造起來更方便

Flink在快手實時多維分析場景的應用是什么

但是 HBase 有些方面相比 RocksDB 較差:

  • HBase 是一個依賴 zookeeper、包含 Master 和 RegionServer 的重量級分布式系統;而 RocksDB 僅是一個嵌入式的 Lib 庫,很輕量級。
  • 在資源隔離方面,HBase 比較困難,內存和 cpu 被多個 Container 共享;而 RocksDB 比較容易,內存和 cpu 伴隨 Container 天生隔離。
  • 網絡開銷方面,因為 HBase 是分布式的,所有比嵌入式的 RocksDB 開銷要大很多。

綜合上面幾點原因,快手達成了第二個共識,將 HBase 瘦身,改造為嵌入式共享存儲系統。

3. 實現方案

Flink在快手實時多維分析場景的應用是什么

接下來介紹一下將 HBase 改造成 SlimBase 的實現方案,主要是分為兩層:

  • 一層是 SlimBase 本身,包含三層結構:Slim HBase、適配器以及接口層;
  • 另一層是 SlimBaseStateBackend,主要包含 ListState、MapState、ValueState 和 ReduceState。

后面將從 HBase 瘦身、適配并實現操作接口以及實現 SlimBaseStateBackend 三個步驟分別進行詳細介紹。

■ HBase 瘦身
Flink在快手實時多維分析場景的應用是什么

先講 HBase 瘦身,主要從減肥和增瘦兩個步驟,在減肥方面:

  • 先對 HBase 進行減裁,去除 client、zookeeper 和 master,僅保留 RegionServer
  • 再對 RegionServer 進行剪裁,去除 ZK Listener、Master Tracker、Rpc、WAL 和 MetaTable
  • 僅保留 RegionServer 中的 Cache、Memstore、Compaction、Fluster 和 Fs

在增瘦方面:

  • 將原來 Master 上用于清理 Hfile 的 HFileCleaner 遷移到 RegionServer 上
  • RocksDB 支持讀放大寫的 merge 接口,但是 SlimBase 是不支持的,所以要實現 merge 的接口

Flink在快手實時多維分析場景的應用是什么

接口層主要有以下三點實現:

  • 仿照 RocksDB,邏輯視圖分為兩級:DB 和 ColumnFamily
  • 支持一些基本的接口:put/get/delete/merge 和 snapshot
  • 額外支持了 restore 接口,用于從 snapshot 中恢復

適配層主要有以下兩個概念:

  • 一個 SlimBase 適配為 Hbase 的 namespace
  • 一個 SlimBase 的 ColumnFamily 適配為 HBase 的 table

Flink在快手實時多維分析場景的應用是什么

SlimBaseStateBackend 實現上主要體現在兩個方面:

  • 一是多種 States 實現,支持多種數據結構,ListState、MapState、ValueState 和 ReduceState
  • 二是改造 Snapshot 和 Restore 的流程,從下面的兩幅圖可以看出,SlimBase 在磁盤 IO 上節省了大量的資源,避免了多次的 IO 的問題。

4. 測試結論

Flink在快手實時多維分析場景的應用是什么

上線對比測試后,得出測試結論:

  • Checkpoint 和 Restore 的時延從分鐘級別降到秒級。
  • 磁盤 IO 下降了66%
  • 磁盤寫吞吐下降50%
  • CPU 開銷下降了33%

5. 后期優化

Flink在快手實時多維分析場景的應用是什么

目前用的 Compaction 策略是 SizeTieredCompaction,后期要實現基于 OldestUnexpiredTime 的 FiFOCompaction 策略,目標是做到無磁盤 IO 開銷。
FiFOCompaction 是一種基于 TTL 的無 IO 的 Compaction 策略;OldestUnexpiredTime 是指例如設置 OldestUnexpiredTime=t2,表示 t2 時刻前的數據全部過期,可以被 Compaction 清理,基于時間點的 FIFOCompaction 理論上可以做到無磁盤 IO 開銷。

Flink在快手實時多維分析場景的應用是什么

后續還有四點優化,前三點是基于 HBase 的優化,最后是針對 HDFS 做的優化:

  • SlimBase 使用 InMemoryCompaction,降低內存 Flush 和 Compaction 開銷
  • SlimBase 支持 prefixBloomFilter,提高 Scan 性能
  • SlimBase 支持短路讀
  • HDFS 副本落盤改造:非本地副本使用 DirectIO 直接落盤,提高本地讀 pagecache 命中率;此條主要是在測試使用時發現單副本比多副本讀寫效率高這一問題

6. 未來規劃

Flink在快手實時多維分析場景的應用是什么

從語言、存儲、壓縮策略、事件事件下推、垃圾回收、檢查點時間、重加載時間七個方面來看,SlimBase 都比 RocksDB 更適合快手實時計算任務的開發,未來的規劃是對 Slimbase 的性能做進一步優化,愿景是將快手 Flink 上的所有業務場景全部用 SlimBase 替代掉 RocksDB。

看完上述內容,你們掌握Flink在快手實時多維分析場景的應用是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石楼县| 龙口市| 通城县| 丁青县| 高要市| 庐江县| 交城县| 石屏县| 邹城市| 海门市| 永仁县| 朔州市| 东莞市| 连南| 舒兰市| 阳春市| 岗巴县| 临猗县| 东平县| 广安市| 榕江县| 台江县| 谢通门县| 元朗区| 法库县| 平陆县| 临城县| 马边| 丹凤县| 凤凰县| 南昌市| 张北县| 若羌县| 栖霞市| 河曲县| 民乐县| 商城县| 襄汾县| 晴隆县| 北宁市| 田阳县|