StarRocks實戰——首汽約車實時數倉實踐

目錄

前言

一、引入背景

二、OLAP引擎選型

三、架構演進

四、實時數倉構建

五、業務實踐價值未來規劃


? 原文大佬的這篇首汽約車實時數倉實踐有借鑒意義,這里摘抄下來用作學習和知識沉淀。

前言

? ? ?首汽約車(以下簡稱“首約”)是首汽集團打造的網約車出行平臺。多樣的用戶人群、豐富的服務場景、持續升級的智能出行技術,帶來業務分析需求的持續增加,分析需求復雜度的持續增加,構建一個強大統一的基礎數據層勢在必行。

一、引入背景

? 2016 年到2021年期間,基于 Hadoop、Spark、Presto 等組件,首約構建了集離線實時并行的 Lambda技術架構的大數據平臺。離線計算基于Hadoop+SparkSQL?進行數倉建設,實時計算基于 Kafka+Spark Streaming 開發實時數據特征,數據落地到 MongoDB、MySQL、Redis等數據庫,然后通過PrestoDB+Tableau Server 提供可視化的自助分析和交互式報表服務。

? ? 但隨著數據累積和數據量的增長,加之精細化的管理運營需求,當前架構日漸吃力,業務上呈現出以下痛點:

1. 多維分析受限:從 2019 年到 2022 年初,業務數據量日增長近 10 倍,數據不斷積累,分析維度不斷細化,數據分析所涉及的維度越來越多。BI 層基于 Tableau Server 的多維分析報表,更新和查詢效率都在變差,維度多的報表每天光刷新就需要幾小時。而且基于 PrestoDB 實現的自助 SQL 查詢平臺并發性能較低,導致出現用戶排隊等待的情況,對業務方的工作效率產生了影響。

二、OLAP引擎選型

選型過程中,我們針對 StarRocks、ClickHouse、TiDB 做了一些調研和對比:

功能StarRocksClickHouseTiDB、TiFlash
標準 SQL?支持標準 SQL,兼容 MySQL 協議不完全支持支持標準 SQL,兼容 MySQL 協議
分布式Join支持幾乎不支持分布式Join,推薦大寬表支持
高并發查詢全面向量化引擎,提高并發查詢量不支持高并發,官方推薦 QPS為100支持??????
運維標準版:支持自動擴容、故障恢復,需要自己實現自動化部署,擴縮容節點、升級等,有一定開發工作
企業版:管理界面,提供集群 DashBoard、SQL Profile、監控報警等功能
依賴 Apache Zookeeper,運維成本運維方便
?
社區開源活躍度高,社區論壇回復快開源社區發展多年,但中文社區支持較少開源社區積極良好
性能讀寫性能好

單機性能強悍

讀性能比 StarRocks 差一些;

寫性能好

輕量級分析良好,數據量大時性能不如 StarRocks;
寫性能受限于 TiKV,一般
場景純分析場景純分析場景使用HTAP 場景
其他生態組件豐富穩定性高

? ? TiDB 適用在一些輕量級的分析場景,但對于一些數據量大、復雜查詢的性能不盡人意。所以我們主要在 ClickHouse 和 StarRocks 中做選擇:

? 在AP(分析)業務中,不同于以點查為主的TP(事務)業務 ,事實表和維度表的關聯操作不可避免。但在一些靈活度要求較高的場景,比如訂單的狀態需要頻繁改變,或者說業務人員的自助BI分析,寬表往往無法滿足我們的需求,我們還需要使用更為靈活的星型或者雪花模型進行建模。

? ?ClickHouse雖然提供了Join的的語義,但使用上對大寬表關聯的能力支撐較弱,復雜的關聯查詢經常會引起?OOM,所以如果使用了ClickHouse,需要再ETL的過程中就將事實表與維度表打平成寬表。而StarRocks提供了Shuffle Join,Colocate? Join,Broadcast Join、Bucket Shuffle Join 等多種Join模式,對于提升聯表查詢場景性能有著非常大的優勢

? ? 通過以上產品能力上的初步對比,我們已經比較傾向于選擇 StarRocks。從使用和未來規劃角度,我們繼續對 StarRocks 進行了評估,雙方在以下幾方面具有很好的契合度:

  • 1. 能夠支撐 PB級別數據量,擁有靈活的建模方式,可以通過向量化引擎、物化視圖、位圖索引、稀疏索引等優化手段構建極速統一的分析層存儲系統。
  • ?2.兼容 MySQL 協議,支持標準 SQL 語法,易于對接使用,全系統無外部依賴,高可用,易于運維管理。可以輕松平穩地對接多種開源或者商業BI工具,比如Tableau、FineBI。
  • ?3. 支持 MySQL、StarRocks、Elasticsearch、 Hive、Hudi、Iceberg等多種外部表查詢數據,重構了數據基礎設施,把復雜的分析架構變得簡單?統?
  • 4. 支持 Stream Load、Spark Load、Broker Load、Routine Load、DataX 導入、CloudCanal導入、Spark-connectors、Flink-connectors 多種導入。在離線與實時場景,可根據實際需要靈活選擇各類導入方式,穩定且可靠。
  • 5. 對于三方組件依賴少,可以極大減少運維范圍和復雜度,并且企業版還提供了可視化的運維管理平臺,極大方便了日常運維使用。
  • 6. 社區活躍,問題能夠較快獲得反饋和解決。版本迭代快,產品能力和產品生態圈都可以看到提升迅速

? ? ? ? ? ? ? ? ? ? ? ? ? ?StarRocks 把復雜的分析架構變得簡單而統一

三、架構演進

? 目前主要是用StarRocks存儲大量明細數據,利用時效性高的特點,替換了原有大數據架構分析層中依賴的MongDB、MySQL、Redis 等數據庫,從而避免了數據指標的重復開發,極大減少了快速變化業務下的復雜開發工作。未來,計劃利用StarRocks強大的物化視圖,多種數據Load方式、外表能力、全面完成Presto的替換,進一步提升大數據的Ad-Hoc(數據探索)性能

四、實時數倉構建

? 隨著數據的增長速度越來越快,精細化運營的訴求不斷增加,傳統的T+1離線數倉構建模式,很難滿足業務運營的增長需求。越早洞察數據,越早拿到分析指標結果,才能幫助業務把握先機。數倉時效性由此逐漸從天級提高到小時級,分鐘級乃至秒級。

?于是,我們采用了StarRocks構建了實時數倉:

  • 通過FlinkCDC從kafka攝入業務數據寫入StarRocks,構建了實時數倉ODS層,外部調度組件通過SQL完成ETL計算,通過微批方式寫入DWD層;DWD層進一步統計聚合寫入DWS,或者直接利用物化視圖構建DWS層。
  • 流式系統兼容,Flink/Spark Streaming 從 Kafka攝入數據,進行業務計算。通過StarRocks提供的Connector連接器將實時計算結果寫入StarRocks實時數倉DWS層,在實時場景中實現統一OLAP分析。

? ?引入StarRocks 之后,我們已經對訂單分析、司機分析、風控分析、算法策略等場景的數據生產過程進行了改造:

  • 1.在訂單場景中,StarRocks極速查詢能力能夠幫助將訂單相關的明細數據全部導入并保存起來。數據按天分區,使用主鍵模型及其部分列更新的特性,將原來存儲于多個系統,不同時間更新的數據寫入一張訂單明細寬表,為訂單業務的實時分析提供了統一的數據支撐,此外訂單數據在很多場景的分析中都是需要的,因為未來可以通過在主鍵模型上構建物化視圖,為訂單分析業務拓展更多可能性,且能夠保證相關數據的一致性。
  • 2. 在司機運營分析場景中,通過 Spark/Flink Streaming實時地將用于計算司機運營指標的數據寫入到StarRocks,然后利用其強大的多表Join能力,使得多維分析不再完成依賴預處理,讓業務運營人員更加及時地掌握當前線上司機數量,上線時長等信息,為其精細化分析和運營提供了保障。與此同時,業務人員的查詢性能體驗了至少5倍的提升:

  • 3.在實時風控場景下,能否保障數據的時效性,對于企業損失控制具有重要意義。以司機運營活動的作弊識別為例,之前由于作弊識別滯后的時間較長,存在先發獎又扣走的情況,使得司機的體驗變差,且有成本損失風險。將風控識別實時化后,能極大避免此類問題。再比如某些渠道待付率異常上漲,若能實時識別、及時干預,就能減少不必要的損失。之前風控特征使用的是離線集群T+1產生的數據,且整個過程需要復雜代碼才能實現。

? ? ?引入StarRocks后,我們將kafka的數據通過Flink CDC的方式寫入到ODS層,之后利用SQL 以微批的方式構建DWD和DWS層,對于實時性高的數據,則通過Spark Streaming/Flink后,再利用StarRocks提供的Connector寫入到DWS層,最終指標的計算直接通過SQL查詢DWS層即可完成。這不僅使得風控預警更加及時,也對風控指標的快速調整提供了重要支撐,當維度變化或增加新需求時,工作量從5天縮短到2-3天即可完成

  • 4. 在算法策略中,更實時的數據和更加靈活的模型特征構建,可以幫助業務團隊更快對市場和競爭上的變化做出響應。以動調策略模型迭代為例,動調是平衡供需的重要手段,動調實驗結果時效性的提高,可以極大提升業務團隊的開城效率。我們正在嘗試和算法團隊一起,利用 StarRocks 極速查詢的能力來提升實時特征構建效率,加速模型的迭代速度,工期預計縮短 70% 以上,為業務團隊更靈活應對業務變化提供助力。

? ? ? ?基于StarRocks搭建實時數倉的過程中,我們也遇到了一些問題,和StarRocks溝通找到的解決和優化方案如下:

  • 1. 在 Flink中使用StarRocks維表做關聯時,有時QPS(并發)過高導致整個集群查詢性能下降。可以通過規避多條數據一次查詢,合理設置分區等措施,提升了查詢的并發數
  • 2. 實時數據導入時,有時寫入頻率過快,可能會導致版本過多/不健康副本的問題。通過設置Spark合并分區或重新分區方式來控制寫入,調整Flink Sink并行或者Flink Connector并發的方式控制寫入,有效解決了問題:
  • 3. 多表 Join有時出現內存過高的問題。一方面在可接受的查詢性能范圍內,設置查詢的并發度,查詢調整內存參數等,另一方面,業務開發層面對查詢任務進行分解,數據進行預計算,計算整合預計算結果,分而治之,減小了查詢對集群的壓力;
  • 4.離線數據通過Broker導入時,會出現BE資源占有過高的問題。我們通過控制導入并發量等措施,保證了整個集群得以健康穩定運行。

五、業務實踐價值未來規劃

? ? ?總體來說,StarRocks 擁有優秀的功能和性能,迭代快速,社區活躍,服務體系良好,能夠很好支撐首約大數據部門未來的規劃。下一步我們將從以下幾方面繼續推進:

  • 1.實時場景將全部遷入至StarRocks,成為首約實時數倉統一的數據底座;
  • 2.接入部分離線數據,構建流批一體的數據倉庫,實現極速統一的數據分析系統;
  • 3. 加強StarRocks監控報警,包括數據接入,數據產出,任務監控等,及時干預 ,完善整體的運維體系;

? ?未來,我們也更加期待 StarRocks 后續版本更加強大的功能特性:

  • 1. 支持復雜數據類型,如 Map、Struct等;
  • 2.RountineLoad支持自定義解析,單個任務可導入多張表的數據;
  • 3. Spark-connector 支持 DataFrame 寫入;
  • 部分列更新不需要指定,可自適應需要更新列。

參考文章:

首汽約車駛向極速統一之路!出行平臺如何基于StarRocks構建實時數倉?

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

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

相關文章

物體檢測-系列教程20:YOLOV5 源碼解析10 (Model類前向傳播、forward_once函數、_initialize_biases函數)

😎😎😎物體檢測-系列教程 總目錄 有任何問題歡迎在下面留言 本篇文章的代碼運行界面均在Pycharm中進行 本篇文章配套的代碼資源已經上傳 點我下載源碼 14、Model類 14.2 前向傳播 def forward(self, x, augmentFalse, profileFalse):if augm…

MySQL 8.0 架構 之錯誤日志文件(Error Log)(2)

文章目錄 MySQL 8.0 架構 之錯誤日志文件(Error Log)(2)MySQL錯誤日志文件(Error Log)錯誤日志相關參數log_errorlog_error_services過濾器(Filter Error Log Components)寫入/接收器…

Vue+SpringBoot打造大學計算機課程管理平臺

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 實驗課程檔案模塊2.2 實驗資源模塊2.3 學生實驗模塊 三、系統設計3.1 用例設計3.2 數據庫設計3.2.1 實驗課程檔案表3.2.2 實驗資源表3.2.3 學生實驗表 四、系統展示五、核心代碼5.1 一鍵生成實驗5.2 提交實驗5.3 批閱實…

131. 分割回文串(力扣LeetCode)

文章目錄 131. 分割回文串題目描述回溯代碼 131. 分割回文串 題目描述 給你一個字符串 s,請你將 s 分割成一些子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 示例 1: 輸入&#xf…

Android 架構MVI、MVVM、MVC、MVP

目錄 一、MVC(Model-View-Controller) 二、 MVP(Model-View-Presenter) 三. MVVM(Model-View-ViewModel) 四. MVI(Model-View-Intent) 五.MVI簡單實現 先簡單了解一下MVC、MVP和…

索引使用規則6——單列索引聯合索引

1、單列索引 單列索引:即一個索引只包含單個列 舉個例子 1.1、給phone和那么建立索引 create index index_name on tb_qianzhui(name); create index index_phone on tb_qianzhui(phone);1.2、查詢發現可能的索引有好幾個,但是最終選擇了phone的索引…

軟考 系統分析師系列知識點之詳細調查(2)

接前一篇文章:軟考 系統分析師系列知識點之詳細調查(1) 所屬章節: 第10章. 系統分析 第2節. 詳細調查 在系統規劃階段,通過初步調查,系統分析師已經對企業的組織結構、系統功能等有了大致的了解。但是&…

蘿卜大雜燴 | 提高數據科學工作效率的 8 個 Python 庫

本文來源公眾號“蘿卜大雜燴”,僅用于學術分享,侵權刪,干貨滿滿。 原文鏈接:提高數據科學工作效率的 8 個 Python 庫 在進行數據科學時,可能會浪費大量時間編碼并等待計算機運行某些東西。所以我選擇了一些 Python 庫…

Vue3中的Hooks詳解

vue3帶來了Composition API,其中Hooks是其重要組成部分。之前我寫過一篇關于vue3 hooks的文章比較簡單 Vue3從入門到刪庫 第十一章(自定義hooks) 所以本文將深入探討Vue3中Hooks,幫助你在Vue3開發中更加得心應手。 一、Vue3 Hoo…

貪吃蛇(C語言)步驟講解

一:文章大概 使用C語言在windows環境的控制臺中模擬實現經典小游戲 實現基本功能: 1.貪吃蛇地圖繪制 2.蛇吃食物的功能(上,下,左,右方向控制蛇的動作) 3.蛇撞墻死亡 4.計算得分 5.蛇身加…

[C語言]——C語言常見概念(1)

目錄 一.C語言是什么、 二.C語言的歷史和輝煌 三.編譯器的選擇(VS2022為例) 1.編譯和鏈接 2.編譯器的對比 3.VS2022 的優缺點 四.VS項目和源文件、頭文件介紹 五.第?個C語言程序 ??????? 一.C語言是什么、 ?和?交流使?的是?然語?&…

【python】爬取鏈家二手房數據做數據分析【附源碼】

一、前言、 在數據分析和挖掘領域中,網絡爬蟲是一種常見的工具,用于從網頁上收集數據。本文將介紹如何使用 Python 編寫簡單的網絡爬蟲程序,從鏈家網上海二手房頁面獲取房屋信息,并將數據保存到 Excel 文件中。 二、效果圖&#…

【JS】解構賦值注意點,解構賦值報錯

報錯代碼 const 小明 { email: 6, pwd: 66 } const 小剛 { email: 9, pwd: 99 }const { email } 小明 const { email } 小剛 報錯圖 原因 2個常量重復,重復在同一個作用域內是不能重復的,例如大括號內{const a 1; const a 2} 小伙伴A提問 問&…

Redis-基礎篇

Redis是一個開源、高性能、內存鍵值存儲數據庫,由 Salvatore Sanfilippo(網名antirez)創建,并在BSD許可下發布。它不僅可以用作緩存系統來加速數據訪問,還可以作為持久化的主數據存儲系統或消息中間件使用。Redis因其數…

leetcode:37.解數獨

題目理解:本題中棋盤的每一個位置都要放一個數字(而N皇后是一行只放一個皇后),并檢查數字是否合法,解數獨的樹形結構要比N皇后更寬更深。 代碼實現:

SpringBoot+Redis 解決海量重復提交問題,yyds!

在實際的開發項目中,一個對外暴露的接口往往會面臨很多次請求,我們來解釋一下冪等的概念:任意多次執行所產生的影響均與一次執行的影響相同。按照這個含義,最終的含義就是 對數據庫的影響只能是一次性的,不能重復處理。如何保證其…

?動類型轉換、強制類型轉換

為何short s1 1;是對的,而float f3.4;是錯的? 整數直接量,默認是int型。所以int a 4L; 會報錯,但是long l 4; 這樣不會,因為這樣會形成一個自動類型的轉換,int類型自動轉換為long類型 小數直接量&#…

JetBrains Gateway Github Copilot 客戶端插件和主機插件

JetBrains Gateway可以通過插件支持Github Copilot(需另行注冊)。 需要安裝插件 客戶端,而非插件 主機,如圖所示: 大概是因為代碼顯示在客戶端(運行在本地的IDE)?

NOC2023軟件創意編程(學而思賽道)python初中組復賽真題

目錄 下載打印原文檔做題: 軟件創意編程 一、參賽范圍 1.參賽組別:小學低年級組(1-3 年級)、小學高年級組(4-6 年級)、初中組。 2.參賽人數:1 人。 3.指導教師:1 人(可空缺)。 4.每人限參加 1 個賽項。 組別確定:以地方教育行政主管部門(教委、教育廳、教育局) 認…

Python 潮流周刊#40:白宮建議使用 Python 等內存安全的語言

△△請給“Python貓”加星標 ,以免錯過文章推送 你好,我是貓哥。這里每周分享優質的 Python、AI 及通用技術內容,大部分為英文。本周刊開源,歡迎投稿[1]。另有電報頻道[2]作為副刊,補充發布更加豐富的資訊,…