天天看點

美團 基于Flink 實時數倉概述1.實時數倉概述

1.實時數倉概述

1.1實時數倉産生背景

傳統的OLTP資料庫: 面向事務處理、面向業務、進行增删改查、反映最新狀态

資料倉庫: 面向主題、內建、相對穩定、反應曆史變化

1.2離線數倉架構

美團 基于Flink 實時數倉概述1.實時數倉概述

1.3實時數倉架構

1.3.1實時數倉的Lambda架構

美團 基于Flink 實時數倉概述1.實時數倉概述

1.3.2實時數倉的kappa架構

美團 基于Flink 實時數倉概述1.實時數倉概述

1.3.3實時數倉的OLAP變體

美團 基于Flink 實時數倉概述1.實時數倉概述

2.基于Flink實作典型的ETL場景

2.1維表join-預加載維表

方法1:将維表加載到記憶體關聯 (DB資料庫)

實作RichFlatMapFunction,在open()方法中讀取資料庫

代碼實作: 關注 LarkMidTable 交流

方法2:利用Flink的分布式緩存 (檔案)

實作通過env.registerCachedFile注冊檔案,在open()方法中進行擷取

代碼實作: 關注 LarkMidTable 交流

方法3:将維表存入到redis中 (nosql資料庫)

代碼實作: 關注 LarkMidTable 交流

方法4:利用Flink的廣播變量(實時流)

代碼實作: 關注 LarkMidTable 交流

方法5:建立臨時表,使用FlinkSql進行清洗

代碼實作: 關注 LarkMidTable 交流

2.2雙流join

方法1:Regular join,FlinkSQL構造兩個表,離線批處理,保持全量的資料。

Flink支援:inner join ,left outer join, right outer join, full outer join

代碼實作: 關注 LarkMidTable 交流

方法2:intderval join,FlinkSQL根據業務規則,清除資料,

例如:

leftKeyedStream
  .intervalJoin(rightKeyedStream)
  // 時間間隔,設定下界和上界
  .between(Time.minutes(-10),Time.seconds(0))
  // 不包含下界
  //.lowerBoundExclusive()
  // 不包含上界
  //.upperBoundExclusive()
  // 自定義ProcessJoinFunction 處理Join到的元素
  .process(ProcessJoinFunction)      

代碼實作: 關注 LarkMidTable 交流

方法3:window join,FlinkSQL根據視窗來進行劃分資料,清理資料

stream.join(otherStream)
    .where(<KeySelector>)
    .equalTo(<KeySelector>)
    .window(<WindowAssigner>)
    .apply(<JoinFunction>)      

代碼實作: 關注 LarkMidTable 交流

# 技術交流

一個人走的很快,一群人走的更遠。

掃描下面的QQ二維碼加入Lark的資料中台開源社群,并為你提供全程免費服務,你也可以與其他夥伴交流大資料技術,如果覺得項目不錯,可以star關注,LarkMidTable團隊将十分感謝您的關注!

QQ群1群【678097205】已滿

微信公衆号 【LarkMidTable】

關注官方微信公衆号,回複加群,會發送社群微信群二維碼,掃描二維碼可加入群聊!

繼續閱讀