<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
核心程序:FE(Frontend)、BE(Backend)。
注:所有節點都是有狀態的。
FE(Frontend)負責管理後設資料,管理使用者端連線,進行查詢規劃、查詢排程等工作。
- Leader:Follower會通過類Paxos的BDBJE協定選主出一個Leader,所有事務的提交都是由Leader發起,並完成;
- Follower:提高查詢並行,同時參與投票,參與選主操作。
Follower
Observer:不參與選主操作,只會非同步同步並且回放紀錄檔,主要用於擴充套件叢集的查詢並行能力。
BE(Backend)負責資料儲存以及SQL執行等工作。
在StarRocks裡,一張表的資料會被拆分成多個Tablet,而每個Tablet都會以多副本的形式儲存在BE節點中,如下圖:
Table資料劃分 + Tablet三副本的資料分佈:
StarRocks支援Hash分佈、Range-Hash的組合資料分佈(推薦)。
為了等到更高的效能,強烈建議使用Range-Hash的組合資料分佈,即先分割區後分桶的方式。
分割區和分桶的選擇是非常關鍵的。在建表時選擇好的分割區分桶列,可以有效提高叢集整體效能。
以下是針對特殊應用場景下,對分割區和分桶選擇的一些建議:
對錶進行儲存時,會對錶進行分割區和分桶兩層處理,將表的資料分散到多臺機器進行儲存和管理。
分割區機制:高效過濾,提升查詢效能。
分桶機制:充分發揮叢集效能,避免熱點問題。
Tablet:最小的資料邏輯單元,可以靈活設定平行計算資源。
Rowset:每一次的資料變更就會產生一個Rowset。
Segment:如果一個Rowset資料量比較大,則拆分成多個Segment資料斷落盤。
指標工廠服務主要面向業務人員,通過對業務指標的採集和處理,實時反映產品狀態,為運營提供資料支撐、檢測產品漏洞或服務異常、提供指標異常告警功能等。
業務指標埋點方式多樣,並不侷限於某種方式,只要符合埋點標識明確、業務引數豐富、資料滿足可解析的基本要求皆可作為資料來源,大致可以分為:SDK、MySQL BinLog、業務紀錄檔、阿里雲ODPS資料分析。
存在的挑戰,各種業務場景眾口難調,歸納資料特徵如下:
引入StarRocks
幸運的是StarRocks有比較豐富的資料模型,覆蓋了上面的所有業務場景的需求,即:明細模型、更新模型、聚合模型、主鍵模型,同時選擇更為靈活的星型模型代替大寬表的方式,即直接使用多表關聯來查詢。
基於以上業務場景的分析,這三種模型可以完美解決資料的問題。
需要實時的資料寫入場景,我也沿用了業內流行的解決方案,即資料採集到 Kafka 之後,使用Flink做實時寫入到StarRocks。StarRocks提供了非常好用的Flink-connector外掛。
小tips:
1. 雖然StarRocks已經很好的優化了寫入效能,當寫入壓力大,仍會出現寫入拒絕,建議可適當增大單次匯入資料量,降低頻率,但同時也會導致資料落庫延遲增加。所以需要做好一定的取捨,做到收益最大化。
2. Flink的sink端不建議設定過大,會引起並行事務過多的報錯,建議每個flink任務source可以設定多些,sink的連線數不能過大。
小結
叢集規模:5FE(8c32GB)、5BE(32c128GB)
目前該方案已支援數百個業務指標的接入,涉及幾十個大盤的指標展示和告警,資料儲存TB級,每日淨增長上百G,總體執行穩定。
內部系統業務看板,主要服務於全公司員工,提供專案及任務跟蹤等功能。
分析業務特點:
當初資料庫選型時,結合業務特點,使用者需要動態、靈活的增刪記錄自己的任務,因而選擇了JOSN 模型減少了應用程式程式碼和儲存層之間的阻抗,選擇MongoDB作為資料儲存。
伴隨著公司快速快發,當需要報表展示,特別是時間跨度比較大,涉及到多部門、多維度、細粒度等報表展示時,查詢時間在MongoDB需要執行10s甚至更久。
調研了StarRocks、ClickHouse兩款都是非常優秀的分析型資料庫,在選型時,分析了業務應用場景,主要集中在單表聚合查詢、多表關聯查詢、實時更新讀寫查詢。維度表更新頻繁,即儲存在MySQL中,StarRocks比較好的支援外表關聯查詢,很大程度上降低了開發難度,最終決定選用StarRocks作為儲存引擎。
改造階段,將原先MongoDB中的一個集合拆分成3張表。使用明細模型,記錄每天的對應人員的任務資訊,按天分割區,由之前的每人每天一條記錄改為,以事件為單位,每人每天可以多條記錄。
實現頻繁更新的維表,則選擇使用外部表,減少維度資料同步到StarRocks的複雜度。
小結
改造前,MongoDB查詢,寫法複雜,多次查詢。
db.time_note_new.aggregate( [ {'$unwind': '$depart'}, {'$match': { 'depart': {'$in': ['部門id']}, 'workday': {'$gte': 1609430400, '$lt': 1646064000}, 'content.id': {'$in': ['事項id']}, 'vacate_state': {'$in': [0, 1]}} }, {'$group': { '_id': '$depart', 'write_hour': {'$sum': '$write_hour'}, 'code_count': {'$sum': '$code_count'}, 'all_hour': {'$sum': '$all_hour'}, 'count_day_user': {'$sum': {'$cond': [{'$eq': ['$vacate_state', 0]}, 1, 0]}}, 'vacate_hour': {'$sum': {'$cond': [{'$eq': ['$vacate_state', 0]}, '$all_hour', 0]}}, 'vacate_write_hour': {'$sum': {'$cond': [{'$eq': ['$vacate_state', 0]}, '$write_hour', 0]}}} -- ... more field }, {'$project': { '_id': 1, 'write_hour': {'$cond': [{'$eq': ['$count_day_user', 0]}, 0, {'$divide': ['$vacate_write_hour', '$count_day_user']}]}, 'count_day_user': 1, 'vacate_hour': 1, 'vacate_write_hour': 1, 'code_count': {'$cond': [{'$eq': ['$count_day_user', 0]}, 0, {'$divide': ['$code_count', '$count_day_user']}]}, 'all_hour': {'$cond': [{'$eq': ['$count_day_user', 0]}, 0, {'$divide': ['$vacate_hour', '$count_day_user']}]}} -- ... more field } ] )
改造後,直接相容SQL,單次聚合。
WITH cont_time as ( SELECT b.depart_id, a.user_id, a.workday, a.content_id, a.vacate_state min(a.content_second)/3600 AS content_hour, min(a.write_second)/3600 AS write_hour, min(a.all_second)/3600 AS all_hour FROM time_note_report AS a JOIN user_department AS b ON a.user_id = b.user_id -- 更多維表關聯 WHERE b.depart_id IN (?) AND a.content_id IN (?) AND a.workday >= '2021-01-01' AND a.workday < '2022-03-31' AND a.vacate_state IN (0, 1) GROUP BY b.depart_id, a.user_id, a.workday, a.content_id,a.vacate_state ) SELECT M.*, N.* FROM ( SELECT t.depart_id, SUM(IF(t.content_id = 14, t.content_hour, 0)) AS content_hour_14, SUM(IF(t.content_id = 46, t.content_hour, 0)) AS content_hour_46, -- ...more FROM cont_time t GROUP BY t.depart_id ) M JOIN ( SELECT depart_id AS join_depart_id, SUM(write_hour) AS write_hour, SUM(all_hour) AS all_hour -- 更多指標 FROM cont_time GROUP BY depart_id ) N ON M.depart_id = N.join_depart_id ORDER BY depart_id ASC
以查詢報表2021/01/01~2022/03/01之間資料對比:
在使用StarRocks時遇到的一些報錯和解決方案(網上資料較少的報錯資訊):
a.資料匯入Stream Load報錯:“current running txns on db 13003 is 100, larger than limit 100”
原因:超過了每個資料庫中正在執行的匯入作業的最大個數,預設值為100。可以通過調整max_running_txn_num_per_db引數來增加每次匯入作業的個數,最好是通過調整作業提交批次。即攢批,減少並行。
b. FE報錯:“java.io.FileNotFoundException: /proc/net/snmp (Too many open files)”
原因:檔案控制程式碼不足,這裡需要注意,如果是supervisor管理程序,則需要將檔案控制程式碼的設定加到fe的啟動指令碼中。
if [[ $(ulimit -n) -lt 60000 ]]; then ulimit -n 65535 fi
c. StarRocks 支援使用 Java 語言編寫使用者定義函數 UDF,在執行函數報錯:“rpc failed, host: x.x.x.x”,be.out紀錄檔中報錯:
start time: Tue Aug 9 19:05:14 CST 2022
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
原因:在使用supervisor管理程序,需要注意增加JAVA_HOME環境變數,即使是BE節點也是需要呼叫Java的一些函數,也可以直接將BE啟動指令碼增加JAVA_HOME環境變數設定。
d. 執行Delete操作報錯如下:
SQL > delete from tableName partition (p20220809,p20220810) where `c_time` > '2022-08-09 15:20:00' and `c_time` < '2022-08-10 15:20:00';
ERROR 1064 (HY000): Where clause only supports compound predicate, binary predicate, is_null predicate and in predicate
原因:目前delete後的where條件不支援between and操作,目前只支援 =、>、>=、<、<=、!=、IN、NOT IN
e. 使用Routine Load消費kakfa資料的時候產生了大量隨機group_id
建議:建routine load的時候指定一下group name。
f. StarRocks連線超時,查詢語句報錯:“ERROR 1064(HY000):there is no scanNode Backend”,當重新啟動BE節點後,短暫的恢復。紀錄檔報錯如下:
kafka log-4-FAIL, event: [thrd:x.x.x.x:9092/bootstrap]: x.x.x.x:9092/1: ApiVersionRequest failed: Local: Timed out: probably due to broker version < 0.10 (see api.version.request configuration) (after 10009ms in state APIVERSION_QUERY)
原因:當Routine Load連線kafka有問題時,會導致BrpcWorker執行緒耗盡,影響正常存取連線StarRocks。臨時解決方案是找到問題任務,暫停任務,即可恢復。
接下來我們會有更多業務接入 StarRocks,替換原有 OLAP 查詢引擎;運用更多的業務場景,積累經驗,提高叢集穩定性。未來希望 StarRocks 優化提升主鍵模型記憶體佔用,支援更靈活的部分列更新方式,持續優化提升 Bitmap 查詢效能,同時優化多租戶資源隔離。今後我們也會繼續積极參與 StarRocks 的社群討論,反饋業務場景。
以上就是得物基於StarRocks的OLAP需求實踐詳解的詳細內容,更多關於得物StarRocks OLAP需求的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45