StarRocks實戰——攜程酒店實時數倉

目錄

一、實時數倉

二、實時數倉架構介紹

2.1 Lambda架構

2.2 Kappa架構

三、攜程酒店實時數倉架構

3.1?架構選型

3.2 實時計算引擎選型

3.3 OLAP選型

四、攜程酒店實時訂單

4.1?數據源

4.2 ETL數據處理

4.3 應用效果

4.4 總結

? 原文大佬的這篇實時數倉建設案例有借鑒意義,屬于數據治理范疇,這里直接摘抄下來用作學習和知識沉淀。

一、實時數倉

? 當前,企業對于數據實時性的需求越來越迫切,因此需要實時數倉來滿足這些需求。傳統的離線數倉的數據時效性為T+1,并且調度頻率以天為單位,無法支持實時場景的數據需求,即使將調度頻率設置為小時,也僅能解決部分時效性要求低的場景,對于時效性要求較高的場景仍然無法優雅地支撐。因此,實時數據使用的問題必須得到有效解決。實時數倉主要用于解決傳統數倉數據時效性較低的問題,通常會用實時的OLAP分析,實時數據看板、業務指標實時監控等場景。

二、實時數倉架構介紹

2.1 Lambda架構

??Lambda架構將數據分為實時數據和離線數據,并分別使用流式計算引擎(例如Flink 或者 SparkStreaming)和批量計算引擎(例如 Hive、Spark)對數據進行計算,然后,將計算結果存儲在不同的存儲引擎上,并對外提供數據服務。

2.2 Kappa架構

? Kappa架構將所有數據源的數據轉換成流式數據,并將計算統一到流式計算引擎上,相比Lambda架構, Kappa 架構省去了離線數據流程,使得流程變得更加簡單。Kappa 架構之所以流行,主要是因為kafka不僅可以作為消息隊列使用,還可以保存更長時間的歷史數據,以替代Lambda架構中的批處理層數據倉庫。流處理引擎以更早的時間作為起點開始消費,起到了批處理的作用。

三、攜程酒店實時數倉架構

3.1?架構選型

? 采用的是Lambda+OLAP 變體架構。Lambda架構具有靈活性高、容錯性高、成熟度高和遷移成本低的優點,但是實時數據和離線數據需要分別使用兩套代碼。

? ?OLAP變體架構:將實時計算中的聚合計算由OLAP引擎承擔,從而減輕實時計算部分的聚合處理壓力。這樣做的優點是既可以滿足數據分析師的實時自助分析需求,并且可以減輕計算引擎的處理壓力,同時也減少了相應的開發和維護成本。缺點是對OLAP 引擎的數據寫入性能和計算性能有更高的要求。

? 3.2 實時計算引擎選型

? ? ?Flink具備Exactly-once的語義,輕量級checkpoint容錯機制、低延遲、高吞吐和易用性高的特點。SparkStreaming 更適合微批處理。我們選擇了使用 Flink。

3.3 OLAP選型

??我們選擇 StarRocks 作為 OLAP 計算引擎。主要原因有3個:

  • StarRocks 是一種使用MPP分布式執行框架的數據庫,集群查詢性能強大;
  • StarRocks在高并發查詢和多表關聯等復雜多維分析場景中表現出色,并發能力強于clickhouse,而攜程酒店的業務場景需要OLAP數據庫支持每小時幾萬次的查詢量;
  • StarRocks 提供了4種數據模型,可以更好的應對攜程酒店的各種業務場景

四、攜程酒店實時訂單

4.1?數據源

? ? Mysql Binlog,通過攜程自研平臺 Muise接入生成 Kafka。

4.2 ETL數據處理

?問題一:如何保證消息處理的有序性?

? ? Muisev平臺保證了Binlog消息的有序性,這里需要討論的是ETL過程中如何保證消息的有序性。例如:一個酒店訂單先在同一張表觸發了兩次更新操作,共計有了兩條 Binlog 消息,消息1和消息2會先后進入流處理系統,如果這兩個消息是在不同的Flink Task上進行處理,那么就有可能由于兩個并發處理的速度不一致,先發生的消息后處理,導致最終輸出的結果不對(出現亂序)

?上圖是一個簡化的過程,業務庫流入到Kafka,Binlog 日志是順序寫入的,根據主鍵進行Hash分區 ,保證同一個主鍵的數據寫入到kafka同一個分區。當Flink消費kafka時,需要設置合理的并發,保證同一個分區的數據由一個Task負責,另外盡量采取邏輯主鍵作為?Shuffle Key,從而保證了Flink內部的有序性。最后在寫入StarRocks時,按照主鍵進行更新或刪除操作,這樣才能保證端到端的一致性。

?問題二:如何生產實時訂單寬表?

? ?為了方便分析師和數據應用使用,我們需要生成明細訂單寬表并存儲在 StarRocks 上。酒店訂單涉及的業務過程相對復雜,數據源來自多個數據流中,且由于酒店訂單變化生命周期較長,客人可能會提前幾個月甚至更久預訂下單。這些都給生產實時訂單寬表帶來一定的困難。

? ?上圖中生成訂單寬表的sql邏輯在離線批處理場景下沒有問題,但是實時場景下,這個sql會按照雙流join的方式依次處理,每次只能處理一個join,所以上面代碼有9個 Join 節點,Join節點會將左流的數據和右流的數據全部保存下來,最終會導致join過程中state狀態存儲膨脹了9倍。

? ?因此,我們采用了union all + group by的方式替代join;先用union all把數據錯位拼接到一起,然后再最外層進行group by。這種方式相當于將 Join 關聯轉換成group by,不會放大 Flink的狀態存儲。

? 還有一個問題,上面說過酒店訂單的生命周期很長,用 union all 的方式,狀態周期只保存了30分鐘,一些訂單的狀態可能已經過期,當出現訂單狀態時,我們需要獲取訂單的歷史狀態,這樣就需要一個中間層保存歷史狀態數據來做補充。歷史數據我們選擇存放在 Redis 中,第一次選擇從離線數據導入,實時更新數據的同時,還更新 Redis和StarRocks。

?問題三:如何做數據校驗?

? ?實時數據存在數據丟失或邏輯變更不及時的風險,為了保證數據的準確性,每日凌晨將實時數據和離線T-1數據做比對,如果數據校驗不一致,會用離線數據更新StarRocks中對應的數據,并排查原因。

? 整體流程見下圖:

4.3 應用效果

? 酒店實時訂單表的數據量為十億級,維表數據量有幾百萬,現已經在幾十個數據看板和監控報表中使用,數據報表通常有二三十個維度和十幾個數據指標,查詢耗時99%約為3秒。

4.4 總結

? ?酒店實時數據具有量級大,生命周期長,業務流程多等復雜數據特征,攜程酒店實時數倉選用 Lambda+OLAP 變體架構,借助 Starrocks 強大的計算性能,不僅降低了實時數倉開發成本,同時達到了支持實時的多維度數據統計、數據監控的效果,在實時庫存監控以及應對緊急突發事件等項目獲得了良好效果。

參考文章:

干貨 | 攜程酒店實時數倉架構和案例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714893.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714893.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機網絡_應用層】TCP應用與相關API守護進程

需要云服務器等云產品來學習Linux的同學可以移步/–>騰訊云<–/官網&#xff0c;輕量型云服務器低至112元/年&#xff0c;優惠多多。&#xff08;聯系我有折扣哦&#xff09; 文章目錄 1. 相關使用接口2. 代碼實現2.1 日志組件2.2 Server端2.3 Client端2.3 bug解決 3. 守…

什么是依賴注入(Dependency Injection)?它在 C++ 中是如何實現的?

什么是依賴注入&#xff08;Dependency Injection&#xff09;&#xff1f;它在 C 中是如何實現的&#xff1f; 依賴注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;是一種設計模式&#xff0c;用于減少軟件組件之間的耦合度&#xff0c;提高代碼的可測試性、…

JVM類加載機制以及雙親委派模型的介紹

目錄 1.類加載介紹 2.具體步驟 2.1加載 2.2驗證 2.3準備 2.4解析 2.5初始化 3.加載過程中的策略-雙親委派模型 1.類加載介紹 類加載,指的是Java進程在運行的時候,把.class文件從硬盤讀取到內存,并進行一系列校驗解析的過程. .class文件>類對象.硬盤>內村 類加載…

spring-boot自定義網站頭像(favicon.ico文件)

一、將ico文件存放到resources目錄的static中的favicon下。 二、在application.properties文件中增加配置 spring.mvc.favicon.enabledfalse 三、如需頁面引用如下&#xff1a; <link rel"icon" type"image/x-icon" ref"${request.contextPat…

智能駕駛規劃控制理論學習03-基于采樣的規劃方法

目錄 一、基于采樣的規劃方法概述 二、概率路圖&#xff08;PRM&#xff09; 1、核心思想 2、實現流程 3、算法描述 4、節點連接處理 5、總結 三、快速搜索隨機樹&#xff08;RRT&#xff09; 1、核心思想 2、實現流程 3、總結 4、改進RRT算法 ①快速搜索隨機圖&a…

【計算機網絡實踐】在windows上配置Xshell和Xftp連接Ubuntu系統

hebut的課下作業&#xff0c;學習使用Xshell和Xftp連接Linux系統 1. 軟件需求 Windows10/11、已安裝VM虛擬機的ubuntu系統、Xshell、Xftp。 Xshell和Xftp在家庭/學校免費 - NetSarang Website (xshell.com)里面可以下載到&#xff0c;上面需要的兩個軟件都在&#xff0c;官網免…

運籌學_1.1.2 線性規劃問題-圖解法

1.1.2 線性規劃問題-圖解法 一、圖解法求解步驟&#xff08;只適用于兩個決策變量問題&#xff09;二、圖解法作圖實例三、圖解法分析線性規劃幾種解的情況1、唯一最優解2、無窮多最優解3、無界解4、無解或無可行解 四、圖解法的幾點啟示 一、圖解法求解步驟&#xff08;只適用…

C++sort排序

前言&#xff1a; C語言的sort函數是一類用于數組排序的函數以下是其簡單的使用&#xff1a; 1.頭文件&#xff1a; #include<algorithm> 2.使用命名空間&#xff1a; using namespace std; 3.函數形式&#xff1a; sort(數組名,數組名元素個數,排序函數); 默認排…

深入淺出Redis(一):對象與數據結構

引言 Redis是一款基于鍵值對的數據結構存儲系統&#xff0c;它的特點是基于內存操作、單線程處理命令、IO多路復用模型處理網絡請求、鍵值對存儲與簡單豐富的數據結構等等 這篇文章主要圍繞Redis中的對象與數據結構來詳細說明鍵值對存儲與簡單豐富的數據結構這兩大特點 Redi…

運籌學_1.1.4 線性規劃問題-解的概念

1.1.4 線性規劃問題-解的概念 一、可行解與最優解二、基的概念三、基變量、基向量&#xff1b;非基變量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最優解與可行解、基可行解的關系五、用例題&#xff08;枚舉法&#xff09;鞏固基解、基可行解、最優解三個概念1、例…

flyway實戰

flyway是一款用來管理數據庫版本的工具框架 一, 添加依賴 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId> </dependency> <dependency><groupId>org.springframework</groupId>&l…

第十一屆藍橋杯省賽第一場C++ A組 / B組《網絡分析》(c++)

1.題目說明 小明正在做一個網絡實驗。 他設置了 n 臺電腦&#xff0c;稱為節點&#xff0c;用于收發和存儲數據。 初始時&#xff0c;所有節點都是獨立的&#xff0c;不存在任何連接。 小明可以通過網線將兩個節點連接起來&#xff0c;連接后兩個節點就可以互相通信了。 兩…

代碼隨想錄算法訓練營第二十五天 | 216.組合總和III 17.電話號碼的字母組合

216.組合總和III https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result [] # 存放結果集sel…

實現一個移動端焦點輪播圖

HTML結構&#xff1a; 創建一個輪播圖的容器&#xff0c;并在其中放置輪播圖片。 <div id"carousel"> <div class"carousel-item active"> <img src"image1.jpg" alt"Image 1"> </div> <div class&q…

Docker部署ZooKeeper

在分布式系統中,ZooKeeper是一個關鍵的組件,用于協調和管理多個節點之間的狀態。本文將詳細介紹如何使用Docker安裝和部署ZooKeeper,包括非集群部署和集群部署兩種情況。 非集群部署 前期準備 在開始之前,請確保你已經安裝了Docker,并且擁有sudo權限。 關閉防火墻和SEL…

5、DVWA代碼審計(2)

一、csrf 1、csrf(low) 限制 復現 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…

電子電器架構 —— DoIP協議相關的介紹

電子電器架構 —— DoIP協議相關的介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 沒有人關注你。也無需有人關注你。你必須承認自己的價值,你不能站在他人的角度來反對自己。人生在世,最怕…

監聽者的力量:探索觀察者模式和spring使用

觀察者模式是一種對象行為型設計模式&#xff0c;它定義了對象之間的一對多依賴關系。 觀察者模式通常用于實現分布式事件處理系統、新聞代理或MVC框架的一部分。在這種模式中&#xff0c;一個對象&#xff08;稱為“主題”或“可觀察對象”&#xff09;維護一系列依賴于它的對…

vue3編寫H5適配橫豎屏

具體思路如下&#xff1a; 1、監聽瀏覽器屏幕變化&#xff0c;通過監聽屏幕寬高&#xff0c;辨別出是橫屏&#xff0c;還是豎屏狀態 在項目的起始根頁面進行監聽&#xff0c;我就是在App.vue文件下進行監聽 代碼如下&#xff1a; <template><RouterView /> <…

【Spring IoC】實驗四:特殊值處理

個人名片&#xff1a; &#x1f43c;作者簡介&#xff1a;一名大三在校生&#xff0c;喜歡AI編程&#x1f38b; &#x1f43b;???個人主頁&#x1f947;&#xff1a;落798. &#x1f43c;個人WeChat&#xff1a;hmmwx53 &#x1f54a;?系列專欄&#xff1a;&#x1f5bc;?…