flink維表join的幾種方式(1)

維表join的幾種方式
一 將維表預加載到內存關聯
實現方式:
定義一個類實現RichFlatMapFunction在open()方法中讀取全部數據加載到內存中。
優缺點:
因爲存在內存中,所以僅支持小數據量維表;因爲open方法中讀取,所以維表變化需要重啓作業。

二 通過Distributed Cache分發本地維度文件到task manager後加載到內存關聯
實現方式:
通過env.registerCachedFile註冊文件
實現RichFunction在open()方法中通過RuntimeContext獲取cache文件
解析使用文件數據
優缺點:
不需要外部數據庫
支持的數據量小,更新維表配置文件需要重啓作業

三 熱存儲關聯查詢
實現方式:
將維度數據導入到熱存儲redis hbase es等,通過異步IO的方式查詢,利用cache機制將維度數據緩存在內存。
優缺點:
維度數據不受限與內存,支持較多維度數據
維度更新結果可能有延遲,而且對外部存儲的壓力較大

四 廣播維表
實現方式:
利用broadcast State將維度數據流廣播到下游做join
將維度數據發送到kakfa作爲廣播原始流S1
定義狀態描述符MapStateDescriptor 調用S1.broadcast()獲得broadCastStream S2
調用非廣播流S3.connect(S2),得到BroadcastConnectedStream S4
應用混合流的S4.process(),並在KeyedBroadcastProcessFunction/BroadcastProcessFunction實現關聯處理邏輯
優缺點:
維度數據實時更新
數據保存在內存中,支持維表數據量比較小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章