1.實時數倉概述
1.1實時數倉産生背景
傳統的OLTP資料庫: 面向事務處理、面向業務、進行增删改查、反映最新狀态
資料倉庫: 面向主題、內建、相對穩定、反應曆史變化
1.2離線數倉架構
1.3實時數倉架構
1.3.1實時數倉的Lambda架構
1.3.2實時數倉的kappa架構
1.3.3實時數倉的OLAP變體
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】
關注官方微信公衆号,回複加群,會發送社群微信群二維碼,掃描二維碼可加入群聊!