成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于Lambda架構的實時電商數倉建設經驗分享

大數據 數據倉庫
文章分享了某電商平臺離線數倉、實時數倉、數據應用等方面的實踐經驗。電商平臺以APP作為載體,最重要的數據就是以訂單為核心的結構化數據和以日志流為核心的半結構化數據,這也互聯網業務最典型的應用場景。

一、背景介紹

電商是移動互聯網時代最重要的業務形式之一,目前主流的業務形態是B2C。在這個群雄逐鹿的年代,除了淘寶、京東、拼多多等頭部電商以外,還活躍著眾多的中小規模電商平臺。筆者所在公司的電商APP就是其中一個,目前注冊用戶超過2億,月活躍用戶接近2000萬。

電商平臺以APP作為載體,最重要的數據就是以訂單為核心的結構化數據和以日志流為核心的半結構化數據,這也互聯網業務最典型的應用場景。

訂單業務包括下單、支付、發貨、物流、評價、退貨等業務流程,但是都可以通過order_id串聯起來,數據保存在關系型數據庫中。我們這邊通過MySQL分庫分表方案承載訂單相關的業務數據,目前積累了自系統上線以來的1.5億訂單,目前日增長訂單數為10萬左右。

點擊流數據則是APP上所有用戶的操作行為埋點記錄數據,是源源不斷產生的半結構化數據。由于前期對APP埋點和日志流數據做過治理,所以目前數據格式比較規范,數據輸出也比較穩定。點擊流數據包括30+固定字段和一個擴展json字段組成,固定字段包括設備信息、會話信息、用戶信息、網絡信息、埋點編碼等,擴展json字段內容則根據實際的頁面情況生成,不同的頁面或者埋點對應的擴展信息不同。點擊流數據每日增量在10億左右,ORC格式占用存儲在1.16T左右。

筆者接手電商數倉項目時,恰逢公司推進數據治理項目,準備重建電商數倉。在我接手之前,公司數倉按照不同的業務模塊劃分不同的數據集市,電商業務有專門的電商集市,但是內部數據加工邏輯比較復雜、沒有明確的數據分層和清晰的數據處理邏輯,基本上是面向需求開發,重復邏輯比較多,數據一致性差。我接手電商數倉以后,按照標準的數倉分層重構了電商數倉,同步產出實時數據,滿足了實時數據看板、自助分析數據集、雙十一大屏、每日業績播報等多個數據應用。恰逢最近經歷了新一輪618大促的考驗,因此予以總結,形成經驗分享給其他數倉開發的同行。

二、技術選型

數據中臺作為公司統一的數據平臺,承載著全公司大數據集群平臺的基礎能力,包括離線集群Hive、Hdfs、Yarn、Spark和Presto,實時集群Flink、ClickHouse,以及相關工具如自助分析工具QuickBI、調度系統、畫像系統、監控告警系統、基于Zepplin的統一數據查詢平臺等。

公司的離線大數據有400多臺服務器,基于Yarn框架進行統一的資源管理,計算資源分為離線計算、實時計算、實時查詢等不同的資源隊列,其中離線計算目前以Spark為主,部分高優先級的任務或者時效性較高的任務已經切換到內部改造過的Presto計算引擎。目前公司大數據平臺上運行的離線數據處理任務主要分為MySQL2Hive數據采集、Hive2Hive數據加工、Hive2MySQL數據分發和Hive2CK數據分發四種類型,任務數分別是1.0W、1.2W、6K、500。

圖片

實時數據處理分為實時數據采集、實時數據計算和實時數據查詢三個方面。實時數據采集通過自動化配置,直接寫入Hive數倉的rt_ods庫,目前有接近1000張表;實時數據計算目前主要是交給Flink完成,目前線上運行的大約500個任務;實時數據查詢包括MySQL和Clickhouse,接入數據量不確定。

早期的數據結果查詢都是基于MySQL分庫分表來實現,2021年底開始引入ClickHouse作為交互式查詢引擎。選擇ClickHouse的原因主要是由于查詢性能快、查詢穩定,只要設置合理的分區,單表數據量可以達到百億甚至千億級別。目前公司在多個業務線引入了ClickHouse集群,在大數據線,ClickHouse集群主要替代MySQL分庫分表方案,來實現數據的快速實時查詢。大數據線的ClickHouse集群由28臺節點組成14主*2副本集群,每臺節點84核CPU+256G內存。

三、電商離線數倉

離線數倉總體上分為三層,即ODS、DW和DM層。

圖片

ODS層也叫數據采集層,數據來源于源系統,保留源系統概貌,為上游邏輯層提供原始數據,隔離對源系統的影響。我們這邊分為SNAP、ODS、History三個數據庫,分別存放快照數據、增量追加數據和全量歷史快照數據。對于全量采集的數據,直接抽取到SNAP庫;對于增量采集的數據默認會按照修改日期抽取最近一天新增或者修改的數據,按日分區存入ODS庫,然后按照庫表主鍵合并去重寫入SNAP庫;對于有保存歷史快照數據需求的表,我們還會將歷史快照復制一份按日保存到History庫。

DW層也叫數據倉庫層,我們分為DIM、DWD和DWS三個庫。

DIM庫用于保存公共維度數據,例如商品、商戶、供應商、用戶基礎信息等。

DWD層也叫明細模型層,數據來源于ODS層,根據上游提供原始數據,劃分數據主題,對ODS層數據進行關聯整合。DWD層用于保存業務明細數據,只做簡單的數據加工和多表關聯,得到按照主題域和數據域劃分的明細數據表。

DWS層也叫輕度匯總層,數據主要來源于DWD層,以指標加工為核心,按照維度建模的思路,加工一致性指標和一致性維度。DWS層也包括寬表層,所以DWS通常可以劃分為兩步進行數據加工,第一步聚焦于指標計算,統一加工業務指標,第二步關聯維度信息,形成大寬表。有時候會把大寬表叫做DWT層,但是我們這邊沒有嚴格的區分。DWS層的寬表通常都是同步到ClickHouse,用于自助分析或者固定報表查詢。

DM層也叫集市層或者數據應用層,數據來源主要來自DWS層,可按業務和應用主題分類,滿足特定應用查詢。DM數據主要保存在Hive數倉的DM庫和對接數據應用的MySQL庫、ClickHouse庫。對于數據量超過千萬的明細數據分析,數據會直接同步到ClickHouse庫;對于百萬級以下的數據,則直接保存到MySQL數據庫。此外,還有應用層的用戶畫像數據保存在HBase。DM層的大部分數據直接來源于DWS,也有有些數據是在DWS層的基礎上進行二次加工,包括簡單匯總、計算同環比、多維匯總等,先寫入DM層,再同步到外部數據庫。

具體到電商數倉模塊,我們主要構建了以下幾個模型表:

圖片

當然,實際項目上設計和建設的模型遠不止這幾張表,我們還針對售后訂單創建單獨的表、根據埋點業務的運營位曝光和點擊計算下單成交率、根據商品的推薦計算推薦模型的有效性,根據搜索的結果及點擊計算不同入口的搜索成交情況等等。但是項目主要的核心的訂單和點擊數據流就是這10張表,其中商品標簽表和用戶標簽表還作為電商業務商品畫像和用戶畫像的基礎數據來源表,提供畫像標簽的統一出口。

四、電商實時數倉

在離線數據加工的基礎上,業務用戶提出來實時數據的需求,主要包括企業微信業績播報機器人和實時交易看板、實時成交監控、雙十一大屏等。

最開始開發的是企業微信業績播報機器人需求,每小時匯總一次當日成交數據,并和歷史成交進行對比,將數據寫入MySQL,再由Java程序讀取數據,按照指定的數據格式播報到企業微信群。

針對這個業務場景,我們按照典型的Lambda架構設計,復用公司的Kafka寫入Hive數據組件,通過配置化實現關鍵業務數據自動同步到Hive的rt_ods數據庫。然后我們通過Presto計算引擎簡化訂單業務的加工邏輯,只計算關鍵成交指標,加工到DWS,并和離線數據加工的DWS層數據進行合并去重,保留最近13個月的訂單明細。點擊流數據不需去重,只保留當日、上月環期和去年同期三個日期的明細數據,并加工好關鍵指標,保留明細數據。最后一步是加工計算本期、同期、環期的不同指標,并分別按照商品維度和用戶維度進行數據匯總,寫入MySQL供JAVA應用查詢。

圖片

第一代實時數倉架構

將實時播報任務串聯成工作流,按照一小時一次的頻率執行,截圖如下:

圖片

實時播報滿足了業務用戶跟蹤業績進展的需求,但是時效性比較差,無法滿足實時成交監控、實時看板和大促大屏的需求,于是我們又進一步開發了新的實時鏈路,即Flink實時鏈路。

圖片

第二代實時數倉架構

Flink實時鏈路主要由兩個FlinkSQL任務組成,分別讀取訂單CDC日志流數據和點擊埋點日志流數據,在進行簡單的數據轉換以后關聯離線加工的商品信息表(定時同步到HBase,全量1600萬)獲取商品維度然后寫入Clickhouse。在電商業務的多維分析中,最主要的維度就是商品維度和用戶維度,其中商品維度包括商戶信息、商品層級信息、商品規格信息、商品業務歸屬、商品價格和進貨渠道等,用戶維度包括用戶注冊信息、用戶基本屬性、用戶成交記錄和用戶衍生標簽。在我們的業務場景中,商品維度是千萬級別,用戶維度是億級別,經過測試,在實時點擊流中,由于數據流量比較大,關聯用戶信息會出現查詢超時導致關聯不上的場景,因為我們砍掉了實時數據的用戶維度,而選擇在ClickHouse進行結果數據查詢時再利用Local Join的優勢來關聯用戶維度。實時加工數據在ClickHouse中設置的TTL時間是3天,即僅保留最近三天的實時數據。

Flink實時鏈路的關鍵在于ClickHouse,我們首先將離線加工好的訂單寬表、點擊流寬表和用戶維度信息表在每天跑批完成以后同步到Clickhouse(其中訂單寬表是每日全量同步最近三個自然年的數據,點擊流每日增量同步昨日數據),然后通過一個視圖來合并離線數據和實時數據,對外提供純實時的一致性數據結果。

在ClickHouse這邊主要處理邏輯有以下幾點:

離線數據取下單(點擊)日期小于當日的數據,實時數據取離線數據沒有的下單(點擊)日期對應的數據。這是為了避免在凌晨時離線數據還沒有跑出來,導致查詢昨日沒有數據的情況。

實時數據關聯用戶維度,取用戶注冊時間和用戶引流渠道等信息。基于ClickHouse的特性,我們將所有接入的數據默認按照fuid的hash值進行數據分片,確保同一個用戶的訂單、點擊數據和用戶維度數據在同一個數據分片上,既可以實現Join的本地化,又能減少用戶數去重計算的資源消耗。為了強制join在本地進行,我們會直接在SQL中使用右表的local表進行關聯。

根據訂單和點擊流的不同特點,承接訂單實時數據的表我們采用ReplicatedReplacingMergeTree引擎表,點擊流實時數據表則采用ReplicatedMergeTree引擎表。在使用訂單實時數據時,我們會在表名后增加final關鍵字,確保讀取到最新的數據。

Flink實時數據由于實時性高、數據完整度高并且基本上都是明細數據,可以滿足各種業務場景,因此在這個數據集基礎上我們創建實時成交看板、實時監控預警和大促大屏等應用需求。下一部分,我們將具體展開數據應用場景的方案解讀。

五、數據應用

在電商數倉的基礎上,我們構建了自助分析、固定報表、企業微信播報、標簽畫像、大促大屏等多個數據應用。其中,自助分析和固定報表都是基于QuickBI實現的,企業微信播報是Java程序,標簽畫像是自研系統,大促大屏是基于VUE開發的Web應用。

首先是自助分析,我們基于訂單數據和點擊流數據各自構建了一個寬表并同步到ClickHouse,不同的類目運營用戶和數據產品都可以基于這兩個自主數據構建自己的看板,并分享給其他同事。自助分析數據集根據用戶的需求還在不停的追加字段,完成各種實驗場景分析、用戶成交分析和經營利潤分析。訂單寬表已經擴充到了256個字段,還有不少的用戶標簽和商品標簽封裝在fuser_label_json和fsku_label_json兩個json字段中。目前,訂單自助數據集是使用用戶最多,應用最廣泛的數據集。

其次是固定報表。在自助分析數據集的基礎上,我們構建了業務經營日報、KPI進度監控等固定報表,滿足管理層經營數據分析需求。這些報表主要在同環比、日周月年等維度上有一些特殊處理,導致需要做一些定制化開發,所以由我們數倉完成。

第三個應用是前面提到的企業微信播報,這里只截取其中一部分內容展現。企業微信從早上9點到晚上24點,每小時播報一次。其中最難的是24點以后的那次播報,需要做很多特殊處理,才能實現。

第四個應用是標簽畫像。我們的標簽畫像系統支持用戶和商品兩個維度,在標簽系統定義的基礎標簽都會換成成SparkSQL,加工以后同步到HBase。衍生標簽在基礎標簽的基礎上組合定義,結果數據也會加工到HBase。

圖片

標簽系統提供單個用戶查詢標簽值和標簽組合圈選用戶兩個功能,前者用于在線接口調用,后者用于導出用戶進行分析或者廣告投放。

第五個應用是大促大屏。我們參照阿里雙十一大屏,構建了實時大促大屏,包括實時成交額、大促期間累計成交額、用戶分類成交金額及本同期對比、商品分類成交金額及本同期對比。

六、后續演進和流批一體探索

目前第二代實時架構已經穩定運行了接近一年時間,做過一些修修補補的微調,但是整體架構沒有變動過。這中間遇到的痛點主要有:

  • 離線數據跑完以后,昨日的實時成交數據會提高,但是第三天又會下降。這是因為離線數據是以12點作為快照時間點計算的,后面的成交或者退款數據在實時里面可以體現,但是離線需要到第三天才能體現。這個問題在大促期間暴露比較明顯。
  • 商品維度數據一天只更新一次,導致當日上線的商品在統計時丟失,或者商品層級調整不能實時體現到看板中。
  • 流處理SQL封裝在Flink管理平臺中,批處理SQL封裝在調度平臺,導致兩邊容易出現邏輯不一致的情況。
  • 點擊流數據積累過多以后,ClickHouse存儲和查詢性能出現瓶頸,但是集群擴容又比較困難,導致我們點擊流數據只保留最近半年數據并且一次最多查詢一個月的數據,用戶滿意度降低。
  • 維度變更導致點擊流數據統計出現異常,比如商品類目、用戶分類等。

面對以上這些問題,我們開啟了第三代實時架構的設計和驗證之路。第三代實時架構我們引入了基于數據湖的流批一體模式和基于OLAP數據庫的多維實時數據查詢模式。在數據湖方面,經過多方對比,最終選擇Hudi作為數據湖底座,繼續沿用Flink進行流式數據加工,選擇Doris作為查詢引擎。

選擇Hudi的原因是:

數據湖技術中Hudi目前最成熟,并且有很多案例分享。

  • Hudi支持流式數據寫入和流式數據讀取,可以滿足我們保存中間過程數據的需求。
  • Hudi支持索引,可以更快的檢索數據。
  • Hudi和當前的HDFS存儲底座結合更好。

選擇Doris的原因有很多,例如支持多表關聯、方便擴展、支持多種數據模型、支持多種索引機制和查詢優化,還支持存算分離遷移歷史數據到對象存儲,直接查詢外部數據源。更詳細的關于Doris的特點和使用方法,歡迎購買筆者撰寫的《Doris實時數倉實戰》一書。有了Doris,最大的好處是我們可以做到維度解耦,可以在查詢的時候才進行關聯,一方面減少了數據存儲空間占用,另一方面避免了歷史維度不一致的情況。

總體來說,我們的第三代實時數倉架構如下:

圖片

采用這種流批一體的架構,可以解決流數據和實時數據切換時成交金額回退的情況;同時保留中間過程數據,可以邏輯變更導致需要回溯歷史重算的情況;引入獨立的OLAP查詢引擎,可以解決查詢的性能問題和多表關聯問題。

雖然理想狀態下,所有數據都通過Flink流式進行加工,但是經過調研,我們還是有一些數據的邏輯無法做到純流處理,比如用戶下單時是新用戶還是老用戶,所以我們還是保留了批處理的鏈路,批處理的數據通過Spark加工完成以后,直接寫入Doris更新主鍵模型的部分列。

目前這個方案已經驗證完成,正在進行配套平臺的搭建和持續運行監控,預計Q4會全面鋪開應用。

相比第一代架構和第二代架構,我們最大的特點就是用Doris代替了ClickHouse。雖然ClickHouse快并且穩定,但是其使用門檻較高、擴展性較差,元數據用ZooKeeper管理,在我們這邊已經達到瓶頸,并且在實時數據高頻寫入的場景容易出現元數據管理異常導致數據寫入失敗的情況。

Apache Doris作為一款國產開源數據庫軟件,不僅實現了向量化引擎、存算分離、Merge on Write等前沿功能,還開創性的融合了數據分桶、行列混合存儲、多種索引支持、多種數據模型等功能到MPP數據庫中,是OLAP和數據倉庫領域冉冉升起的新星。《Doris實時數倉實戰》一書囊括Doris的基本操作、架構設計、進階使用、運維管理、拓展應用等各方面的內容,還有大量的具體項目實踐經驗分析,非常適合想使用Doris進行數倉開發的小伙伴學習。目前Doris社區非常活躍,功能還在不斷迭代和演化中,Doris背后的商業公司飛輪科技也給予了Doris發展非常大的助力,Apache Doris一定能成為一款具有全球影響力的開源產品。

責任編輯:姜華 來源: DataFunTalk
相關推薦

2018-10-19 14:16:09

Flink數據倉庫數據系統

2016-09-22 13:53:17

IBM

2022-06-22 06:42:35

美團業務FlinkSQL數倉

2023-03-10 08:57:31

機器學習電商數據挖掘

2022-08-22 17:46:56

虛擬數倉Impala

2021-01-21 05:46:22

JavaLambda開發

2011-06-29 11:09:44

SEO外鏈

2021-07-13 07:04:19

Flink數倉數據

2013-05-30 10:20:39

系統架構

2009-01-15 09:43:51

Web架構設計緩存

2015-11-09 09:58:31

大數據Lambda架構

2017-03-03 14:10:50

電商基礎架構建設

2020-05-29 17:10:15

數據架構數據一切數據體系

2011-05-17 17:51:43

SEO網站優化

2011-06-28 18:15:50

SEO外鏈

2021-08-31 10:18:34

Flink 數倉一體快手

2021-01-18 05:20:52

數倉hive架構

2022-08-01 15:58:48

數據倉庫架構數據

2017-02-14 15:37:32

KappaLambda

2016-05-03 14:02:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av黄色片| 干干天天| 精品国产一区一区二区三亚瑟 | 日韩免费中文字幕 | 中文二区 | 天天操夜夜操 | 亚洲一区二区视频 | 日本一区精品 | 91久久综合亚洲鲁鲁五月天 | 国产一区二区三区亚洲 | 国产一区二区三区免费 | av在线一区二区三区 | 国产午夜精品一区二区三区 | 成人免费视频网站在线看 | 日韩在线观看视频一区 | 91大神在线资源观看无广告 | 欧美日韩成人在线 | 一级免费在线视频 | 色综合久久久 | 中文字幕在线一区 | 天堂视频中文在线 | 国产精品一区二区三区四区五区 | 亚洲综合一区二区三区 | 综合视频在线 | 免费国产视频在线观看 | 欧美日本一区二区 | 欧美一区二区三区 | 亚洲综合无码一区二区 | 国产精品区一区二区三 | 91亚洲精| 国产精品福利在线观看 | 日本欧美国产在线观看 | 国产小视频精品 | 免费在线看黄视频 | 国产精品视频一二三区 | 成人欧美一区二区三区在线观看 | 国产精品久久久av | 欧美精品欧美精品系列 | 中文字幕乱码一区二区三区 | 久久久精品久久 | 羞羞网站免费 |