StarRocks實戰——松果出行實時數倉實踐

目錄

一、背景

二、松果出行實時OLAP的演進

2.1?實時數倉1.0的架構

2.2 實時數倉2.0的架構

2.3?實時數倉3.0的架構

三、StarRocks 的引入

四、StarRocks在松果出行的應用

4.1?在訂單業務中的應用

4.2?在車輛方向的應用

4.3?StarRocks “極速統一” 落地

4.4?StarRocks 與內部平臺的融合

五、總結與規劃


? 原文大佬的這篇StarRocks數倉建設案例有借鑒意義,這里摘抄下來用作學習和知識沉淀。

一、背景

? ?松果出行作為一家面向未來的交通行業科技公司,業務數據涵蓋支付、車輛、制造、營銷、訂單、廣告等。憑借 StarRocks高效的多表關聯以及實時更新能力,放棄了原有基于 Impala+Kudu 和 ClickHouse 的實時數倉構建模式,基于 StarRocks 實踐了全新的實時數倉模式,大幅的降低了實時分析構建的復雜性。通過這個平臺,我們不僅可以快速構建各種小時、分鐘、秒級的看板指標以及數據服務,還能保證數據在導入準確的同時保持高性能。

? ? 在引入 StarRocks后,我們不斷做減法,成功統一查詢引擎、降低維護成本、提高數據取用靈活性。如今,StarRocks 已成為我們數據中臺統一分析的底座

二、松果出行實時OLAP的演進

? ? 作為對內對外的數據窗口的提供者,松果出行數據中臺部門的職責是圍繞數據集群、OLAP 引擎、離線 / 實時數倉、畫像標簽、數據治理、產品工具等,結合數據建模、人工智能、增強分析、數據可視化等技術,為業務的智能化分析決策提供支撐。

? 兩輪電單車出行是我們的核心業務。業務鏈條主要包含投車、騎行、支付、換電、營銷、挪車等很多環節。在這些過程中我們需要對中間過程中的變更做留存,也需要對最終的結果數據計算。既有針對車的、也有針對不同區域、訂單的維度需求,需要定時或不定時提供多維度的數據。準實時、實時的數據需求也越來越多,越來越迫切。

??松果出行數據中臺采用的是經典的Lambda架構,離線跟實時是兩套單獨的體系;離線以 Hive、Spark、Presto、MySQL 為主,做數據清洗、計算、查詢、展示使用,這套架構基本能滿足離線分析的需求。對于實時場景的探索,主要經歷了三個階段:

2.1?實時數倉1.0的架構

? ?MySQL 業務庫數據經 Canal 實時抽取并發送到Kafka再寫入 Kudu,Spark定時從 Kudu 讀取數據并計算,通過Impala進行查詢,提供小時級看板指標到 BI,解決了業務對于小時級數據的分析需求。另外一部分數據經 Spark 計算后寫入 MySQL,用作對外的數據服務。

? ?但隨著深入使用,這套方案也存在以下痛點:

  • 需要單獨開發維護一套 Spark 程序來讀取 Kudu表,定時計算,維護成本高;
  • Kudu表的創建、讀取、修改都不是很方便,要花很多時間修改程序;
  • 對于一些由多個原子指標組合衍生出來的指標無法快速實現;
  • Impala + Kudu 的組件維護成本高;
  • 無法獲取每條變更日志所有變更狀態的明細數據;
  • 針對 Kudu 跟 Impala 的監控缺失;
  • 大數據量的快速查詢無法支撐。

2.2 實時數倉2.0的架構

? 為了解決以上痛點,我們又引入了實時2.0 的架構,如下圖所示:

? 此方案數據采集階段跟 1.0 架構相同,都是利用 Canal 組件實時抽取業務庫數據到 Kafka,ETL階段用Flink Stream+Flink SQL消費kafka做數據清洗和分層,DIM層數據存儲在HBase和Mysql中,ODS,DWD等其他層數據放入Kafka,最后通過 Flink對數據進行關聯、擴維、深度清洗后寫入ClickHouse 對外提供查詢。

? 在 2.0 架構中,用 ClickHouse 替換了 Kudu + Impala,主要利用ClickHouse 的如下功能

  • 豐富多樣的表引擎可以支持不同業務查詢;
  • 利用任意合法表達式的分區操作進行裁剪,大大提高查詢效率;
  • 支持表級及列級過期設置,降低空間占用率;
  • 支持不同壓縮方式,提高查詢速度;
  • 類 SQL 語法,且支持多種不同組件,對外提供 HTTP、JDBC、ODBC 等不同鏈接方式,便于整合到不同工具鏈路當中;
  • 豐富的函數庫,可滿足不同查詢需求。

這套方案提供了小時級以及更小時間粒度的看板指標需求,解決了 1.0 方案的一部分痛點,在一段時間內可以滿足業務需求。但隨著應用的深入,這套方案也展現出一些問題:

  • 更新刪除能力差,去重能力差,導致數據準確性差;
  • 組件維護成本高;
  • 表結構變更成本高;
  • 查詢并發有限制;
  • 分布式表的節點橫向擴展差;
  • 多表 Join 性能差。

2.3?實時數倉3.0的架構

為了解決以上問題,我們又引入了 StarRocks,實時架構演化了到了 3.0 方案:

? ?數據采集到Kafka之后,先是通過Flink Stream 進行反序列化、分流等操作,然后通過Flink SQL進行關聯、擴維等,分為ODS、DIM、DWD、DWS層,其中DIM層存儲在Mysql與HBase當中,其他層存儲在kafka當中,層到層之間都是通過Flink來實現,所有數據的最終歸口都在StarRocks。目前提供小時、分鐘、秒級的看板指標及數據服務,歷史數據和增量數據共同存儲。3.0方案完美解決了 1.0跟 2.0方案的痛點,甚至超出了我們的預期。

三、StarRocks 的引入

? 引入 StarRocks 主要是為了解決 2.0 架構面臨的痛點。總結下來,我們對新的 OLAP 引擎的期望主要包括下面幾點:

  • 不僅大寬表查詢性能好,多表 Join 查詢性能也非常優秀;
  • 支持 SQL 和類 SQL 查詢,方便業務使用;
  • 支持批量、實時數據導入,滿足歷史數據和增量數據的提數需求;
  • 支持數據的更新、過期等,支持表結構的快速變更;
  • 支持大數據量的秒級查詢響應;
  • 有較好的并發支持能力;
  • 可以兼容已有的數據架構,可以方便地與 HDFS、Hive、MySQL 等交互使用;
  • 有較強的容災能力,運維簡單,部署快速;

四、StarRocks在松果出行的應用

4.1?在訂單業務中的應用

? 訂單分析是我們的核心業務場景之一。引入 StarRocks 后,整個鏈路設計如下:

? ? 歷史數據用Broker Load從Hive直接導入StarRocks。增量數據通過Canal 抽取后再通過 Flink SQL 將訂單表做字段補齊生成寬表后,直接用Routine Load 寫入 StarRocks明細模型表,然后創建邏輯視圖來滿足不同維度的計算及所有狀態的明細數據查詢需求,在這層邏輯視圖上,通過調度平臺定時對數據加工匯總后Insert 到 StarRocks,作為數倉 ADS 層來滿足不同團隊的查詢需求。

? 這套架構的好處是,我們只需要?Flink 做簡單的 ETL 處理,后續業務計算在StarRocks 進行,避免數據重復消費,這樣可以快速靈活地響應不同團隊不同維度的需求,而不需要在對接新的需求時,重新設計方案來對接,從而降低開發工期、靈活適用不同場景。

?目前,我們基于StarRocks 實現了秒級、小時級、天級時間分析粒度城市,大區,全國區域分析粒度,供訂單量、訂單總金額、超時費、里程費、客單價等維度下 30 多種不同的指標。業務變更已完全不需要我們重新修改開發程序,數據驗證也簡單快速。作為數據中臺部門,只需新建一個視圖或者修改視圖,,即可快速上線,提供數據支撐。在進行數據修復、異常追溯時也鏈路清晰,極大地提高了開發效率。

4.2?在車輛方向的應用

? ?車輛是我們的核心資產。從車輛的投放,到挪車、換電、維修等,整個鏈路非常長,不同車輛的狀態是我們關注的重點,整個數據鏈路如下:

? ?這條數據鏈路涉及10多張表,基本都是業務庫數據。每張表要求的數據存儲狀態都不一樣。比如實際投放車輛數,需要用到歷史和實時的所有數據,中間會減去未投放的車輛數。而投放狀態是時刻變化的,實際使用車輛數需要從訂單表中增量獲取當天被騎行的車輛數,可用車輛數則要從投放車輛數中減去那些維修、被收車、缺電等狀態的車輛。這些狀態的數據庫表又是不同的業務團隊所產生的,整合在一起非常繁瑣。

? ?如果用傳統的實時數倉的模型,基于kafka+Flink窗口+狀態無法實現這一復雜邏輯。如果用 Spark+Hive 的方式,數據的及時性無法保證,線上 Hadoop(集群壓力會非常大,口徑變更時修改也很復雜。

? ?上述基于StarRocks搭建的數據鏈路,則解決了這些問題。對于能提前關聯的數據,我們用?Flink SQL 打成大寬表入庫,需要歷史數據且狀態時刻變化的數據全量從 Hive 導入 StarRocks,然后通過Canal?抽取增量數據到 Kafka ,再導入 StarRocks 來更新狀態。在最上層創建邏輯視圖,通過調度平臺定時計算輸出到ADS層,供業務方使用。當需要口徑做變更,或者查看不同維度的車輛指標時,我們只需新建一個邏輯視圖即可。

? ?如今在車輛方向的應用,我們提供小時粒度的數據、20 多種不同的指標,給業務運營提供了扎實的數據支撐。

4.3?StarRocks “極速統一” 落地

? 基于StarRocks 在上述場景的成功應用,我們對其他場景的數據鏈路也進行了調整。目前 StarRocks 在數據中臺的實時鏈路中應用非常廣泛,已經是我們的重要基礎。

? 大部分準實時、實時需求已接入這套體系。基于StarRocks的需求任務大概有?50 多個,提供了大概 150 多個指標、2T 多的數據。后續我們會將全部實時數據接入到 StarRocks,支撐實時數據分析、數據服務、指標展示、監控告警等方面的應用。

? ?在接觸并選用 StarRocks 之前,我們早期使用了很多組件:Druid、Kylin、ElasticSearch、Kudu、ClickHouse、Impala。這些組件的適用場景都不盡相同,語法以及能力也各有千秋。我們用 Druid 來預計算所有內部服務的埋點日志數據,但無法查看明細數據;用 Kudu 主鍵去重,來滿足實時更新的業務數據去重需求,使用 Impala 或者 Presto 對外提供查詢;用 ClickHouse 來存儲實時埋點數據和業務數據,采用復雜語句來實現去重和窗口功能;用 Kylin 試點數據口徑和維度相對固定的指標計算場景。總體而言,組件比較多,使用也比較混亂,不僅數據存儲分散,占用有限的機器資源,而且每個組件的語法完全不一樣,學習成本高。另外,各組件都需要單獨搭建性能監控報警體系,后期的升級維護困難,運維壓力很大

? 經過改造后,整個實時鏈路都接入到StarRocks,StarRocks稱為大數據通用 OLAP 的重要底座。

? 從數據源頭來看,目前有以下源頭:離線的Hive 數據,實時的Kafka 數據、Flink-Connector 的數據,MySQL/HDFS 的數據。這些都能通過StarRocks原生的Load方式進行數據導入。

在表的設計方面:

  • 大部分表都按照時間字段進行了分區,使用常用的查詢列以及關聯的關鍵列作為分桶
  • 對于明細數據,由于數據量比較大,做了數據過期的設置;
  • 使用UniqueKey 的replace_if_not_null對部分列進行更新,后續PrimaryKey 將支持部分列更新,我們也將進行更多實驗;
  • 控制 Routine Load導入頻率在 10-15s,降低后臺合并的頻率。

在運維方面:

  • 針對 FE,配置了 VIP 代理,保證查詢請求的高可用,同時也保證查詢請求負載均衡,不至于單節點承受高頻次請求;
  • 目前使用的是社區版,我們自己實現了針對 FE、BE、Routine Load 任務的監控告警;
  • 用 Grafana 搭建了指標監控大盤

在性能方面:

? ? 以前我們使用了很多不同類型的查詢引擎,不斷做加法,大多數時候都要忙于處理各種組件的異常。現在引入 StarRocks 后,不斷做減法,最終統一查詢引擎、降低維護成本、提高數據取用靈活性。

4.4?StarRocks 與內部平臺的融合

? ?StarRocks 現在也作為一個基礎數據庫,融合在了松果出行的數據分析平臺和數據資產平臺中。在這些平臺中,作為工具的底層基礎框架,StarRocks 為業務發揮著重要的支撐作用。

當然,在使用過程中我們也發現了一些小問題:

  • String 類型的數據長度有限制,對于某些長度較大的字段智能過濾或者無法適用;

  • 物化視圖不能支持復雜條件的聚合計算;

  • 動態分區表的分區目前只支持天、周、月,不能支持年的粒度。

五、總結與規劃

? ? 使用 StarRocks 后,不僅我們前期的業務痛點得到了解決,實時 OLAP 分析的需求也被更好地滿足。同時,將多組件收斂到 StarRocks,不僅滿足了多樣化的業務需求,也極大降低了使用和運維成本。

? ?接下來我們將進一步優化StarRocks的使用性能和使用場景:

  • 更多的離線業務從 Hive/Presto 遷移過來,支撐更多的離線業務;
  • 進一步收斂 OLAP 引擎,將 ClickHouse 的所有任務遷移到 StarRocks;
  • 充分利用 StarRocks 的優越性能進行多業務的多維分析;
  • 優化我們的表、任務,充分利用物化視圖的能力;
  • 完善對 StarRocks 指標的監控;
  • 將 StarRocks 嵌入更多的平臺工具當中,使建表導數等更加智能化;
  • 探索實時標簽在 StarRocks 中的運用。

參考文章:

松果出行 x StarRocks:實時數倉新范式的實踐之路 - StarRocks的個人空間 - OSCHINA - 中文開源技術交流社區

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

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

相關文章

Lambda、Function、StreamAPI詳解

目錄 1、Lambda 2、Function 3、StreamAPI 中間操作:Intermediate Operations 終止操作:Terminal Operation 1、Lambda Java8語法糖:參數列表 箭頭 方法體 package com.atguiggu.lambda;import java.util.*; import java.util.funct…

分布式ID生成系統之雪花算法詳解

在當今的云計算和微服務架構盛行的時代,分布式系統已成為軟件開發的重要組成部分。隨著系統規模的擴大和業務的復雜化,對數據一致性和唯一性的要求也越來越高,尤其是在全局唯一標識符(ID)的生成上。因此,分…

代碼隨想錄算法訓練營Day48 | 121.買賣股票的最佳時機、122.買賣股票的最佳時機 II

121.買賣股票的最佳時機 &#xff08;想寫動態規劃寫著寫著變成貪心了&#xff09; 半貪心半動規&#xff1a; int maxProfit(vector<int>& prices) {vector<int> dp(prices.size(), 0);int minVal prices[0];for (int i 1; i < prices.size(); i) {//…

yolov5訓練太慢的解決方案

問題原因 訓練太慢大多是因為沒有安裝CUDA和pytorch&#xff0c;導致的只有cpu在跑&#xff0c;顯卡沒跑 這就是很典型的。 解決方案 第一步&#xff1a;安裝CUDA 在本機上面安裝CUDA,記住只有N卡可以安裝&#xff0c;一開始的電腦是自帶CUDA的。 如果不是自帶的CUDA&…

Apache Paimon Flink引擎解析

Paimon 支持 Flink 1.17, 1.16, 1.15 和 1.14&#xff0c;當前 Paimon 提供了兩類 Jar 包&#xff0c;一類支持數據讀寫&#xff0c;另一類支持其它操作&#xff08;compaction&#xff09; Version Type Jar Flink 1.18 Bundled Jar paimon-flink-1.18-0.7…

SentenceTransformer簡單使用

SentenceTransformer簡單使用 1 SentenceTransformer介紹 SentenceTransformer主要用于對句子、文本和圖像進行嵌入。可用于文本和圖像的相似度對比查找等 # SentenceTransformer官網地址 https://www.sbert.net/# 安裝SentenceTransformer pip install -U sentence-transfo…

求數字的每一位之和

求數字的每一位之和 題目描述&#xff1a;解法思路&#xff1a;解法代碼&#xff1a;運行結果&#xff1a; 題目描述&#xff1a; 輸入一個整數m&#xff0c;求這個整數m的每?位之和&#xff0c;并打印。 測試1&#xff1a; 輸?&#xff1a;1234 輸出&#xff1a;10 測試2&…

土壤侵蝕量化評估

根據之前的文章,已經算出了R、K、LS、C、P 現在計算土壤侵蝕,將幾個前期制作好的因子的TIFF文件,用柵格計算器相乘 發現局部地區存在輕度侵蝕,大部分區域是微度侵蝕 然后對比了一下范圍 其中的幾個因子都在文獻范圍內,說明計算結果并未出錯,可能就是研究區正常范圍和結…

6020一拖二快充線:手機充電的革命性創新

在快節奏的現代生活中&#xff0c;手機已不僅僅是一個通訊工具&#xff0c;更是我們工作、學習和娛樂的得力助手。然而&#xff0c;手機的電量問題一直是困擾著我們的難題。為了解決這個問題&#xff0c;市場上出現了一種名為“一拖二快充線”的充電設備&#xff0c;它不僅具備…

etcd入門-(1)安裝篇

一、etcd安裝 https://github.com/etcd-io/etcd/releases 根據需要下載安裝etcd, 確保添加到環境變量 執行 etcd -v 查看安裝版本 二、etcd運行 本地運行集群 1.首先安裝goreman go install github.com/mattn/goremanlatest2.準備Procfile 將腳本下載到本地&#xff0c;或者復…

八. 實戰:CUDA-BEVFusion部署分析-分析BEVFusion中各個ONNX

目錄 前言0. 簡述1. camera.backbone.onnx(fp16)2. camera.backbone.onnx(int8)3. camera.vtransform.onnx(fp16)4. fuser.onnx(fp16)5. fuser.onnx(int8)6. lidar.backbone.xyz.onnx7. head.bbox.onnx(fp16)總結下載鏈接參考 前言 自動駕駛之心推出的《CUDA與TensorRT部署實戰…

每日一類:Qt中的萬能容器

在Qt框架中&#xff0c;QVariant類扮演著一個非常重要的角色。它是一個萬能容器類&#xff0c;可以存儲Qt中的任何基本類型數據&#xff0c;包括自定義類型。這種靈活性使得QVariant成為Qt編程中不可或缺的工具&#xff0c;特別是在需要處理不同類型數據或進行對象間通信時。 …

Unity UGUI之Scrollbar基本了解

Unity的Scrollbar組件是用于在UI中創建滾動條的組件之一。滾動條通常與其他可滾動的UI元素&#xff08;如滾動視圖或列表&#xff09;一起使用&#xff0c;以便用戶可以在內容超出可見區域時滾動內容。 以下是Scrollbar的基本信息和用法: 1、創建 在Unity的Hierarchy視圖中右…

柯西矩陣介紹

經典定義 柯西矩陣&#xff08;Cauchy Matrix&#xff09;&#xff0c;是一種特殊類型的矩陣&#xff0c;它在數學中的多個領域&#xff0c;包括線性代數、數值分析和插值理論中都有重要應用。柯西矩陣以19世紀法國數學家奧古斯丁-路易柯西的名字命名。 柯西矩陣是一個方陣&am…

Krylov matrix

Krylov矩陣是一種在數值線性代數中使用的矩陣&#xff0c;尤其是在迭代解法中用于求解線性方程組、特征值問題和其他線性代數問題。它是由俄國數學家阿列克謝尼古拉耶維奇克雷洛夫&#xff08;Alexei Nikolaevich Krylov&#xff09;的名字命名的。 Krylov子空間由以下形式的矩…

jetson nano——編譯安裝opencv==4.4

目錄 1.下載源碼&#xff0c;我提供的鏈接如下&#xff1a;1.1文件上傳的路徑位置&#xff0c;注意ymck是我自己的用戶名&#xff08;你們自己換成你們自己相對應的就行&#xff09; 2.解壓文件3.安裝依賴4.增加swap交換內存4.1臨時增加交換內存swap4.2永久增加swap 5.安裝open…

2024-03-03 作業

作業要求&#xff1a; 1.使用fwrite、fread將一張隨意的bmp圖片&#xff0c;修改成德國的國旗 2.使用提供的getch函數&#xff0c;編寫一個專門用來輸入密碼的函數&#xff0c;要求輸入密碼的時候&#xff0c;顯示 * 號&#xff0c;輸入回車的時候&#xff0c;密碼輸入結束 作業…

學習Android的第十九天

目錄 Android ExpandableListView 分組列表 ExpandableListView 屬性 ExpandableListView 事件 ExpandableListView 的 Adapter 范例 參考文檔 Android ViewFlipper 翻轉視圖 ViewFlipper 屬性 ViewFlipper 方法 為 ViewFlipper 加入 View 例子&#xff1a;全屏幕可…

【MySQL】索引(重點)-- 詳解

一、索引 沒有索引&#xff0c;可能會有什么問題&#xff1f; 索引 &#xff1a;提高數據庫的性能&#xff0c;索引是物美價廉的東西了。不用加內存&#xff0c;不用改程序&#xff0c;不用調 sql &#xff0c;只要執行正確的 create index &#xff0c;查詢速度就可能提高成…

加密與安全_探索數字證書

文章目錄 Pre概述使用keytool生成證書使用Openssl生成證書 &#xff08;推薦&#xff09;證書的吊銷小結 Pre PKI - 借助Nginx 實現Https 服務端單向認證、服務端客戶端雙向認證 PKI - 04 證書授權頒發機構&#xff08;CA&#xff09; & 數字證書 PKI - 數字簽名與數字證…