国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flink實時電商數(shù)倉(十)

這篇具有很好參考價值的文章主要介紹了Flink實時電商數(shù)倉(十)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

common模塊回顧

  1. app
    • BaseApp: 作為其他子模塊中使用Flink - StreamAPI的父類,實現(xiàn)了StreamAPI中的通用邏輯,在其他子模塊中只需編寫關于數(shù)據(jù)處理的核心邏輯。
    • BaseSQLApp: 作為其他子模塊中使用Flink- SQLAPI的父類。在里面設置了使用SQL API的環(huán)境、并行度、檢查點等固定邏輯。
  2. bean:存放其他子模塊中使用到的javaBean對象,因為如果一直使用jsonObject對象調(diào)用數(shù)據(jù)的話,需要使用類似getString("字段名")的方式,沒有直接使用javaBean對象那么方便。
  3. constant
    • 存儲字符串常量
    • 為了保證一致性,如果某個常量修改時,只需在這里修改即可對整個項目進行修改
  4. function
    • DorisMapFunction:將javaBean對象轉(zhuǎn)換為對應的json字符串對象,并且將駝峰式命名方式修改為蛇形命名方式。便于寫入doris。
  5. util
    • DateFormateUtil
    • FlinkSinkUtil
    • FlinkSourceUtil
    • HBaseUtil
    • IkUtil
    • JdbcUtil
    • SQLUtil
      • getUpsertKafakaSQL: 一定要聲明主鍵,支持撤回流
      • getDorisSinkSQL: 用于寫入Doris

dim層回顧

  • Flink-cdc監(jiān)控mysql中的維度配置表
  • 將監(jiān)控的數(shù)據(jù)流做成廣播流
  • 將廣播流和讀取數(shù)據(jù)的主流進行connect
  • 主流數(shù)據(jù)根據(jù)廣播流的配置信息進行分流,注意需要先提前緩存一次配置表信息
  • 達到動態(tài)拆分數(shù)據(jù)表的效果

dwd層FlinkSQL回顧

  • 注意join時會將所有數(shù)據(jù)都存儲到內(nèi)存中,需要考慮設置TTL
  • 大表join小表時,可以考慮使用lookup join
  • 如果數(shù)據(jù)流有明確的先后關系時,考慮使用Interval join

在支付成功模塊,由于訂單詳情表處理時已經(jīng)存在撤回流,但支付成功模塊也是使用left join方式調(diào)用訂單詳情數(shù)據(jù),會導致產(chǎn)生兩次撤回流。在后續(xù)dws層處理時,要注意對數(shù)據(jù)進行去重過濾。

dws層回顧

  • 如何判斷使用FlinkSQL還是StreamAPI
    • 如果比較標準化, 比如簡單的開窗聚合,一般使用FlinkSQL
    • 如果需要使用狀態(tài)處理數(shù)據(jù),比如判斷是否為獨立用戶,使用StreamAPI

交易域sku粒度訂單下單各窗口匯總

  • 需求分析:從Kafka訂單明細主題讀取數(shù)據(jù),過濾null數(shù)據(jù)并按照唯一鍵對數(shù)據(jù)去重,按照SKU維度分組,統(tǒng)計原始金額、活動減免金額、優(yōu)惠券減免金額和訂單金額,并關聯(lián)維度信息,將數(shù)據(jù)寫入Doris交易域SKU粒度下單各窗口匯總表

  • 思路分析:

    • 方案一:按照訂單ID進行分組,根據(jù)業(yè)務邏輯設置定時器取最后一個數(shù)據(jù)進行發(fā)送
    • 方案二:將度量值存放到狀態(tài)中,每次新數(shù)據(jù)到達時,將新的度量值減去狀態(tài)中的度量值
  • 具體實現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-773574.html

    • 因為需要使用狀態(tài),故使用BaseApp; 設置端口號10029,并發(fā)度4,消費者組為類名,消費者主題名稱為dwd訂單詳情
    • 讀取dwd下單主題數(shù)據(jù), stream.print()
    • 過濾清洗:
      • 去掉null數(shù)據(jù), stream.flatMap(new FlatMapFunction<>())
      • ts: 水位線,不能為空;進行位數(shù)的修正,如果是10位的,使用 jsonObj.put("ts", ts*1000)
      • id: keyby的關鍵字,不能為空
      • sku_id: group by的粒度關鍵字,也不能為空
    • 添加水位線
      • 網(wǎng)絡延遲5L
      • 添加數(shù)據(jù)的泛型,提取數(shù)據(jù)中的ts,作為水位線(注意觀察ts的位數(shù),需要為13位,毫秒級)
    • 修正度量值,轉(zhuǎn)換數(shù)據(jù)結構
      • 使用id關鍵字進行分組
      • 使用process算子中的狀態(tài)來進行處理stream.process(new KeyedProcessFunction<>),返回值為對應的javabean對象
      • 在狀態(tài)中存儲上一次的度量值大小,只保存30秒
      • processElement()方法中獲取狀態(tài)中的度量值,使用前需要判空,如果為空設置為0,之后才能進行數(shù)值計算。
      • 創(chuàng)建對應的bean對象,度量值都減去狀態(tài)中的度量值和更新狀態(tài)中當前的度量值
    • 分組開窗聚合
      • 使用skuId進行keyby
      • 分組后使用window算子進行開窗,設置窗口時間,注意Time屬于org.apache.flink.streaming.api.windowing.time.Time.seconds()
      • 使用reduce算子進行聚合計算, 聚合時需要累積所有度量值
      • new ProcessWindowFunction()獲取窗口信息, startTime, EndTime, curTime, 獲取到后寫入javaBean對象中
    • 關聯(lián)維度信息
      • 先分組聚合再關聯(lián)維度信息的原因:關聯(lián)維度信息需要join操作,是很耗費性能的大操作。先聚合數(shù)據(jù)能大幅度減少數(shù)據(jù)量。
      • 啟動HBase,查看對的sku_info表中是否存儲著對應的維度信息
      • 獲取外部連接,需要使用生命周期方法(open,close在整個算子執(zhí)行過程中只運行一次);對應的關聯(lián)維度信息,即RichMapFunction()
      • map方法中使用HBase的API讀取表格數(shù)據(jù),使用讀取到的字段補全原本的信息
    • 創(chuàng)建HBase的API:讀取表格數(shù)據(jù) get
      • 獲取table
      • 創(chuàng)建get對象
      • 調(diào)用get方法
      • 獲取數(shù)據(jù)寫入jsonObj
    • 寫出到Doris

維度關聯(lián)優(yōu)化

  1. 旁路緩存:獨立緩存服務有(redis, memcache).
    Flink實時電商數(shù)倉(十),flink,大數(shù)據(jù)
  • 使用旁路緩存時要注意保持數(shù)據(jù)的一致性,如果數(shù)據(jù)發(fā)生修改和刪除,直接刪除redis中的數(shù)據(jù)。

同步+旁路緩存模式

  1. 引入Jedis相關依賴
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
  1. 創(chuàng)建Redis工具類RedisUtil
  2. 在RichMapFunction中的open和close方法中獲取和關閉HBase和Redisd的連接。
  3. 拼接對應的redisRowKey
  4. 讀取Redis緩存的數(shù)據(jù),jsonObj的字符串
  5. 判斷redis讀取到的數(shù)據(jù)是否為空
    • 沒有數(shù)據(jù):需要讀取HBase;jsonObj = HBaseUtil.getCells(), 讀取到數(shù)據(jù)后,使用jedis.setex()存儲到redis
    • redis有緩存,直接返回
  6. 進行維度關聯(lián)

Dim層寫入HBase修正

  • 在dim層將數(shù)據(jù)寫入HBase時,需要同時獲取Redis的連接。
  • 判斷redis中的緩存是否發(fā)生變化
    • 判斷數(shù)據(jù)類型是修改或刪除時,刪除Redis中對應的數(shù)據(jù)
    • 拼寫數(shù)據(jù)的rowkey
    • 使用jedis.del(rediskey)來刪除

到了這里,關于Flink實時電商數(shù)倉(十)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Flink 實時數(shù)倉 (一) --------- 數(shù)據(jù)采集層

    Flink 實時數(shù)倉 (一) --------- 數(shù)據(jù)采集層

    1. 普通實時計算與實時數(shù)倉比較 普通的實時計算優(yōu)先考慮時效性,所以從數(shù)據(jù)源采集經(jīng)過實時計算直接得到結果。如此做時效性更好,但是弊端是由于計算過程中的中間結果沒有沉淀下來,所以當面對大量實時需求的時候,計算的復用性較差,開發(fā)成本隨著需求增加直線上升

    2024年02月06日
    瀏覽(28)
  • Flink+Doris 實時數(shù)倉

    Flink+Doris 實時數(shù)倉

    Doris基本原理 Doris基本架構非常簡單,只有FE(Frontend)、BE(Backend)兩種角色,不依賴任何外部組件,對部署和運維非常友好。架構圖如下 可以 看到Doris 的數(shù)倉架構十分簡潔,不依賴 Hadoop 生態(tài)組件,構建及運維成本較低。 FE(Frontend)以 Java 語言為主,主要功能職責: 接收用戶

    2024年02月07日
    瀏覽(20)
  • Flink CDC和Flink SQL構建實時數(shù)倉Flink寫入Doris

    Flink CDC和Flink SQL構建實時數(shù)倉Flink寫入Doris

    軟件環(huán)境 Flink1.13.3 Scala 2.12 doris 0.14 一、MySQL 開啟binlog日志、創(chuàng)建用戶 1.開啟bin log MySQL 8.0默認開啟了binlog,可以通過代碼show variables like \\\"%log_bin%\\\";查詢是否開啟了,show variables like \\\"%server_id%\\\";查詢服務器ID。 上圖分別顯示了bin long是否開啟以及bin log所在的位置。 2.創(chuàng)建用戶 C

    2024年02月02日
    瀏覽(17)
  • 實時數(shù)倉|基于Flink1.11的SQL構建實時數(shù)倉探索實踐

    實時數(shù)倉主要是為了解決傳統(tǒng)數(shù)倉數(shù)據(jù)時效性低的問題,實時數(shù)倉通常會用在實時的 OLAP 分析、實時的數(shù)據(jù)看板、業(yè)務指標實時監(jiān)控等場景。雖然關于實時數(shù)倉的架構及技術選型與傳統(tǒng)的離線數(shù)倉會存在差異,但是關于數(shù)倉建設的基本方法論是一致的。本文會分享基于 Flink

    2024年02月16日
    瀏覽(22)
  • Flink實時數(shù)倉同步:拉鏈表實戰(zhàn)詳解

    Flink實時數(shù)倉同步:拉鏈表實戰(zhàn)詳解

    在大數(shù)據(jù)領域,業(yè)務數(shù)據(jù)通常最初存儲在關系型數(shù)據(jù)庫,例如MySQL。然而,為了滿足日常分析和報表等需求,大數(shù)據(jù)平臺會采用多種不同的存儲方式來容納這些業(yè)務數(shù)據(jù)。這些存儲方式包括離線倉庫、實時倉庫等,根據(jù)不同的業(yè)務需求和數(shù)據(jù)特性進行選擇。 舉例來說,假設業(yè)

    2024年01月20日
    瀏覽(45)
  • flink 實時數(shù)倉構建與開發(fā)[記錄一些坑]

    flink 實時數(shù)倉構建與開發(fā)[記錄一些坑]

    1、業(yè)務庫使用pg數(shù)據(jù)庫, 業(yè)務數(shù)據(jù)可以改動任意時間段數(shù)據(jù) 2、監(jiān)聽采集業(yè)務庫數(shù)據(jù),實時捕捉業(yè)務庫數(shù)據(jù)變更,同時實時變更目標表和報表數(shù)據(jù) 實時數(shù)據(jù)流圖與分層設計說明 1、debezium采集pg庫表數(shù)據(jù)同步到kafka 【kafka模式】 2、flink 消費kafka寫入pg或kafka 【upset-kafka,新版k

    2024年02月16日
    瀏覽(29)
  • GaussDB(DWS)基于Flink的實時數(shù)倉構建

    本文分享自華為云社區(qū)《GaussDB(DWS)基于Flink的實時數(shù)倉構建》,作者:胡辣湯。 大數(shù)據(jù)時代,廠商對實時數(shù)據(jù)分析的訴求越來越強烈,數(shù)據(jù)分析時效從T+1時效趨向于T+0時效,為了給客戶提供極速分析查詢能力,華為云數(shù)倉GaussDB(DWS)基于流處理框架Flink實現(xiàn)了實時數(shù)倉構建。在

    2024年04月22日
    瀏覽(37)
  • Flink實時數(shù)倉之用戶埋點系統(tǒng)(一)

    Flink實時數(shù)倉之用戶埋點系統(tǒng)(一)

    用戶行為采集 行為數(shù)據(jù):頁面瀏覽、點擊、在線日志等數(shù)據(jù) 活躍數(shù)據(jù):用戶注冊、卸載安裝、活躍等數(shù)據(jù) App性能日志:卡頓、異常等數(shù)據(jù) 業(yè)務數(shù)據(jù)采集 業(yè)務數(shù)據(jù):支付等 維度表:渠道、商品等 用戶行為日志 日志結構大致可分為兩類,一是頁面日志,二是啟動日志和在線

    2024年04月11日
    瀏覽(21)
  • 美團買菜基于 Flink 的實時數(shù)倉建設

    美團買菜基于 Flink 的實時數(shù)倉建設

    美團買菜是美團自營生鮮零售平臺,上面所有的商品都由美團親自采購,并通過供應鏈物流體系,運輸?shù)骄嚯x用戶 3km 范圍內(nèi)的服務站。用戶從美團買菜平臺下單后,商品會從服務站送到用戶手中,最快 30 分鐘內(nèi)。 上圖中,左側的時間軸展示了美團買菜的發(fā)展歷程,右側展示

    2024年02月09日
    瀏覽(18)
  • 曹操出行基于 Hologres+Flink 的實時數(shù)倉建設

    曹操出行基于 Hologres+Flink 的實時數(shù)倉建設

    曹操出行 創(chuàng)立于2015年5月21日,是吉利控股集團布局“新能源汽車共享生態(tài)”的戰(zhàn)略性投資業(yè)務,以“科技重塑綠色共享出行”為使命,將全球領先的互聯(lián)網(wǎng)、車聯(lián)網(wǎng)、自動駕駛技術以及新能源科技,創(chuàng)新應用于共享出行領域,以“用心服務國民出行”為品牌主張,致力于打

    2024年01月20日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包