<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56215|
      • 收錄網站:181186|

      IT精英團

      低代碼實時倉儲系統的設計與實踐

      低代碼實時倉儲系統的設計與實踐

      瀏覽次數:
      評論次數:
      編輯: 景同
      信息來源: ITPUB
      更新日期: 2022-05-05 18:33:21
      摘要

      1導讀本文介紹58信安基于Flink實現低代碼實時數倉構建系統,我們將數倉構建這一過程進行抽象,通過工程化的思想去解決,將固有領域問題交給系統,讓開發人員關注數據本身,解放人力縮短數倉構建周期。2背景

      • 正文開始
      • 相關閱讀
      • 推薦作品

      一個

      導讀

      本文介紹58信安基于Flink實現低代碼實時數倉構建系統,我們將數倉構建這一過程進行抽象,通過工程化的思想去解決,將固有領域問題交給系統,讓開發人員關注數據本身,解放人力縮短數倉構建周期。

      2

      背景

      隨著數據驅動業務需求的不斷增加,數據倉庫的建設越來越頻繁。開發人員在數據倉庫的構建過程中(嵌入、數據接收、數據補全、數據清洗、數據寫入存儲介質)做大量重復性的工作。同時,對于實時數據倉庫的構建,他們需要一定的專業技能,比如如何使用Flink等框架做過濾、轉換、聚合等。對于后端業務團隊來說,學習成本。為了解決這些問題,低代碼的建庫系統應運而生,用工程化的思路解決,把固有的領域問題交給系統,讓開發者關注數據本身,解放人力,縮短建庫周期。

      整體架構

      參考數據倉庫的分層,我們將系統分為ODS、DWD、DWS、ADS四層,這四層的運行由系統的核心“執行引擎”驅動。通過這四層對數據進行逐層處理,最終為上游業務提供指標監控、數據行情、Ad-hoc查詢等應用支持。

      ODS層:記錄了最原始的數據,包括用戶行為日志、業務日志、系統日志等。

      DWD層:ODS層的數據通過數據清理、維度補全、拆分合并等,組織成一個業務列表或一個寬泛的主題明細列表。

      DWS層:DWD層的數據按照各種維度進行輕粒度的聚合和統計,用于為上層應用場景提供統計便利。

      ADS層:DWD或DWS層的數據通過各種數據存儲介質實時存儲,為各種業務場景提供支持,如指數監測、數據行情、即席查詢等。

      “零”開發的設計實現

      為了解放開發人力,我們的設計理念是“低代碼”,整個業務流程由定制的專業領域語言(DSL)結合規則引擎驅動。用戶只需要配置DSL,這樣就避免了代碼開發。技術實現的重點是如何用DSL表達整個業務流程,如何設計這個規則引擎來執行DSL,最終完成流程。

      DSL的設計:

      這個業務核心流程的本質就是使用Flink(流處理系統)進行數據TEL的過程。我們把這個過程簡稱為源(輸入)-轉換(轉化)-聚合(聚合)-匯(輸出)這些STAS,最后把所有數據流組織成一個有向圖:

      DSL本質上就是表達這個有向圖,下面的語法例子就是描述某個流。數據源是kafka,經過轉換聚合后輸出到一個hive目錄:

      自定義規則引擎的設計:

      目前業界有很多成熟的規則引擎,如drools、aviator、mvel、easyrules等。盡管它們是水平的

      比會有規則支持力度和性能的差異,但是他們基于通用規則的本質就決定了存在語法復雜和執行效率的問題。

      由于我們面對的問題域相對固定,可以考慮對數倉構建這一業務領域進行抽象,進而完成貼合業務的自定義的規則引擎,這樣有形成針對性的規則語法復雜度會相應降低,同時也避免了語法執行效率低下的問題。

      自定義規則引擎在流程處理上只需要解析多個DSL所構成的有向圖(上面介紹STAS有向圖),而在規則處理方面就是在執行STAS的規則,其中“輸入和輸出”都是數據源和存儲介質的問題,本身就是有限集,而“聚合”本身Flink就有SQL支持,所以我們只需要集中處理“數據轉換”的問題,數據轉換規劃可以說是無限集,但是在這個無限集中會有一個2/8原則,也就是說20%的規則可以滿足80%的需求,例如數據轉換經常面對的“屬性命名標準化”,“數據類型轉換”,“條件判斷”等,而剩余的零散的規則可以采用定制化開發的方式。整個規則引擎的技術邏輯也就是上述描述的部分,如下圖(藍色為引擎,綠色為數據):

      最終我們將DSL數據轉化成頁面的配置化,引導使用者快速構建實時數倉,總體流程如下:

       


      5

      插件化設計實現高擴展

      基于DSL的技術實現代替了硬編碼,而DSL代替硬編碼的程度,就取決于其規則語法的豐富程度,當語法開始膨脹的時候,如何開發和維護語法,如何讓開發語法的人只關注語法本身,即使不了解系統本身也可以開發語法,我們的方案就是插件化,一切皆插件,如下圖(紅色框部分,每一個都是插件):


      插件的本質就是自定義的Java代碼,同時插件在定義上分為功能型和語法型兩種,功能型插件描述這個數據是用什么處理的,以$P開頭,語法型插件描述著這個數據是怎么處理的,以#開頭。

      插件的語法定義如下:

            

      插件的代碼定義如下:


      按照2/8原則系統會內置一部分插件作為最基礎的能力,剩余的部分通過下載Jar包的方式進行載入,插件在系統中的執行過程為“下載”、“加載”、“命中”、“運行”這四步(系統內置的插件不需要下載),插件的總體執行邏輯如下:

             


      6

      維表數據補全

      維表補全在實時數倉構建中是一個必不可少的過程,一般分為業務關聯補全和數據字典補全,我們結合實際需求提供兩種補全方案:

      (1)基于緩存同步:

      在程序啟動時,將mysql、hbase、wtable等外部存儲資源加載到內存,在transform過程中查詢對應內存數據做維表補全,這種方案由于受限于內存和資源的更新頻率,比較適合處理數據量有限并且變化頻率不高的數據,如某某基本信息、數據字典等。我們提供了對應的補全插件,以mysql的維表補全為例:


      (2)基于實時查詢:

      在transform過程中查詢對應數據庫或者服務接口,這種方案不限于內存且在實時性上有所保證,避免了基于緩存的問題,但是在執行效率和并發性會受限,比較適合處理數據變化頻率高但是實時流本身體量不大的情況。對于實時查詢的維表補全方式,由于查詢的邏輯差異較大,這時候可以由接入方來編寫自定義插件完成


      7

      多流合并

      實時數倉構建過程中會經常遇到流合并問題,即將兩個流合并成一個流,Flink在流合并上提供兩種模式,一種是基于時間窗口(滑動,滾動,會話)的join ,一種是基于無時間窗口的interval join。

      結合實際業務場景,真實的數據往往會出現跨時間窗口分布的情況,舉個例子:將用戶的帖子瀏覽數據流和帖子點贊數據流合并,由于瀏覽和點贊有個天然的時間跨度,這種情況下,無論選擇什么類型和多長跨度的時間窗口,都會有一部分數據會跨窗口,此時數據就無法合并,為了解決這個問題 ,我們利用官方提供的interval join做無時間窗口合并。

      但是需要注意的是,interval join的本質就是流數據的等待,但是等待就意味著系統會占用內存甚至存儲資源hold住當前數據,在面對具體需求的時候,使用者要根據當前的數據量級,可接受的延時等因素綜合來決策。


      8

      聚合運算

      聚合運算用于DWS層的數倉構建,將DWD層經過輕粒度的聚合,可以為上游統計類應用減輕壓力,也可以作為基礎數據支撐報表、大盤等應用場景。我們提供兩種方式構建DWS層數據,對于簡單的聚合運算,我們提供基于原始Flink語法的聚合插件進行處理,對于復雜的聚合運算,我們提供基于Flink SQL的聚合插件進行處理。


      9

      數倉構建

      構建系統支持hdfs,clickhouse,mysql 等多種存儲介質的寫入,用于支持應用層各種實時或者離線的統計需求,以下介紹兩種常用的存儲介質

      sink to hdfs:

      hdfs是數倉構建過程中的核心存儲介質,為了支撐快速檢索,我們將hdfs按照時間進行分區,分區粒度為小時級partition - {day} - {hour} ,在時間模式的選擇上我們采用flink 的 eventtime,這么選擇一是考慮到eventtime可以真實反映數據的生成時間,更貼合業務場景,二是考慮到當實時流處理出現問題的時候,可以通過離線日志按照eventtime進行重塑。

      sink to clickhouse:

      clickhouse作為OLAP數據庫 , 很好的支撐了海量數據實時深度挖掘的應用場景,我們對clickhouse的sink 操作采用集團支持的解決方案,即將數據源推到kafka中,由集團訂閱kafka來構建clickhouse數據


      10

      階段性成果及展望

      目前我們的低代碼實時數倉構建系統支撐了部門內多個業務,完成日均30億+的數據處理工作,數倉構建成本從2~3人日降低到小時級,極大的縮短了數倉構建周期,支持了上游應用的快速迭代。

      面向未來,我們期望本套系統起始于數倉構建但并不終止于數倉構建,基于實時流或是批流一體化處理的應用場景非常廣泛 ,例如實時監控預警、特征工程、算法模型訓練等等,這些都可以去探索。


      參考文獻:

      • https://flink.apache.org/


      作者簡介:

      • 邢而康:58同城-信息安全部-后端資深開發工程師

      • 陸航:58同城-信息安全部-后端高級開發工程師


      標簽:數據 插件 實時
      7 種提升Spring Boot吞吐量神技!
      ? 上一篇 2022-05-05
      40幅最完整的計算機網絡思維導圖
      下一篇 ? 2022-05-06
      • 胡迪核心知識點詳解(好文章合集)
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-3分鐘秒懂大數據,作者在IT中穿梭旅行在Flink實時流中,經常會通過FlinkCDC插件讀取Mysql數據,然后寫入Hudi中。所以在執行上述操作時,需要了解……
      • 前端面試必須解決網絡中的跨域問題
        0閱讀 0條評論 個贊
        什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
      • 如何在Bash腳本中使用強大的Linux測試命令
        0閱讀 0條評論 個贊
        Linuxtest命令是Shell內置命令,用來檢測某個條件是否成立。test通常和if語句一起使用,并且大部分if語句都依賴test??梢詫⒁粋€元素與另一個元素進行比較,但它更?!?/div>
      • 真正的建筑設計是什么樣子的?
        1閱讀 0條評論 個贊
        什么是架構和架構本質在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的……
      • 10分鐘了解云原生 值得收藏~
        0閱讀 0條評論 個贊
        文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 10分鐘了解云原生 值得收藏~
        0閱讀 0條評論 個贊
        文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
      • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
        1閱讀 0條評論 個贊
        前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
      • 關于數據中心最強科普 一個就給你完整了解!
        1閱讀 0條評論 個贊
        數據中心,英文縮寫叫IDC,也就是InternetDataCenter(互聯網數據中心)。之所以不太直接稱之為“DC”,主要是為了避免和直流電(DirectCurrent)混淆。而且,現在的數……
      • Java原子變量中set()和lazySet()的區別
        1閱讀 0條評論 個贊
        來源|Java技術指北(ID:javanorth)在本教程中,我們將講講Javaatomic類(如AtomicInteger和AtomicReference)的方法set()和l……
      • 高并發服務的幾點優化經驗
        1閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • 40幅最完整的計算機網絡思維導圖
        1閱讀 0條評論 個贊
        傳輸介質簡介以太網幀結構IP編址ICMP協議ARP協議傳輸層協議路由基礎靜態路由基礎距離矢量路由協議——RIP鏈路狀態協議——OSPFHDLC&PPP原理與應用幀中繼原理與配置PPPoENAT網絡地址……
      • 內存數據庫如何利用內存?
        1閱讀 0條評論 個贊
        與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
      • Linux預定任務調度(crontab) 好實用!
        0閱讀 0條評論 個贊
        概述crontab命令用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行??梢允褂胏rontab定時處理離線任務,比如每天凌晨2點更新數……
      • Linux的10個最危險的命令
        0閱讀 0條評論 個贊
        rm-rf命令該命令可能導致不可恢復的系統崩壞。>rm-rf/#強制刪除根目錄下所有東西。>rm-rf*#強制刪除當前目錄的所有文件。>rm-rf.#強制刪除當前文件夾及其子文件夾。執行rm-r……
      • 記得服務器被黑過一次 沒想到能輕松搞定~
        1閱讀 0條評論 個贊
        常在河邊走,哪能不濕鞋。自認為安全防范意識不錯,沒想到服務器被入侵挖礦的事情也能落到自己頭上。本文簡要記錄發現服務器被入侵挖礦的過程,同時分析木馬的痕跡和信息,最后給出解決方法。服務器被入侵挖礦過程事……
      • MySQL 8.0如何創建規范表
        1閱讀 0條評論 個贊
        這一節內容,基于MySQL8.0版本,聊一下如何創建一張規范的表。首先貼出一張相對規范的表結構:CREATETABLEstudent_info(`id`INTNOTNULLAUTO_IN……
      • 我用Java在幾分鐘內處理了30億條數據.
        2閱讀 0條評論 個贊
        來源:https://c1n.cn/GM8hb目錄場景說明模擬數據場景分析讀取數據處理數據遇到的問題場景說明現有一個10G文件的數據,里面包含了18-70之間的整數,分別表示18-70歲的……
      • 甲骨文(第11代)單實例-室內空調(第11代)遷移模擬測試
        1閱讀 0條評論 個贊
        Oracle11.2.0.4單實例----Oracle19C-RAC遷移模擬測試總體思想:通過RMAN物理備份在備庫恢復主庫數據,后續通過在主庫停業務后,將從備份后的所有日志都同步到新庫應用,重新配置……
      • 胡迪核心知識點詳解(好文章合集)
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-3分鐘秒懂大數據,作者在IT中穿梭旅行在Flink實時流中,經常會通過FlinkCDC插件讀取Mysql數據,然后寫入Hudi中。所以在執行上述操作時,需要了解……
      • 如何正確計算Kubernetes容器的CPU利用率
        1閱讀 0條評論 個贊
        本文轉自博客園,原文:https://www.cnblogs.com/apink/p/15767687.html,版權歸原作者所有。參數解釋使用Prometheus配置kubernetes環境……
      • 記得網上一個K8s Ingress訪問故障排除 最后卻不是帖子的鍋
        1閱讀 0條評論 個贊
        具體現象應用遷移至我們的PaaS平臺后會出現偶發性的502問題,錯誤見圖片:相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。為啥我們只看到了POST……
      • SQL中的三種重復數據刪除方法 還有誰不行?
        1閱讀 0條評論 個贊
        SQL去重是數據分析工作中比較常見的一個場景,今天給大家具體介紹3種去重的方法。在使用SQL提數的時候,常會遇到表內有重復值的時候,比如我們想得到uv(獨立訪客),就需要做去重。在MySQL中……
      • 真正的建筑設計是什么樣子的?
        1閱讀 0條評論 個贊
        什么是架構和架構本質在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的……
      • 3種方式!轉到錯誤處理最佳實踐
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-云加社區,作者李森林導語|錯誤處理一直以一是編程必需要面對的問題,錯誤處理如果做的好的話,代碼的穩定性會很好。不同的語言有不同的出現處理的方式。Go語言也一樣,在本篇文章中,我們……
      • 如何在Linux下擴展XFS根分區
        2閱讀 0條評論 個贊
        在某些情況下,/分區在Linux中磁盤空間不足。即使壓縮和刪除舊的日志文件也無濟于事,因此在這種情況下,我們別無選擇,只能擴展/文件系統。在本文中,我們將演示如何在Linux系統中擴展不……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>