美團 基於Flink 實時數倉 概述


1.實時數倉概述

1.1實時數倉產生背景

傳統的OLTP數據庫: 面向事務處理、面向業務、進行增刪改查、反映最新狀態

數據倉庫: 面向主題、集成、相對穩定、反應歷史變化

1.2離線數倉架構

離線數倉

1.3實時數倉架構

1.3.1實時數倉的Lambda架構

lambda架構

1.3.2實時數倉的kappa架構

kappa架構

1.3.3實時數倉的OLAP變體

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】

關注官方微信公眾號,回復加群,會發送社區微信群二維碼,掃描二維碼可加入群聊!

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM