因公司產(chǎn)品需要用到Flink和動態(tài)維表關(guān)聯(lián)的功能页眯。但Flink目前截至1.8版本還不支持這種維表的join操作虫溜,需要在阿里給Flink貢獻的 Flink Aysnc I/O 功能上再做封裝尝胆,則在GitHub上找到了FlinkStreamSQL開源項目,并記錄下了代碼閱讀記錄。
核心方法
其實很簡單使用Apache Calcite把SQL抽象成語法樹鹉动,如果遇到j(luò)oin語句就把這個語句拆出來,專門做處理宏邮,使用Flink底層api生成新的DataStream泽示,然后在做join缸血,這樣就變成流與流之間Flink語法支持的join了。
維表的數(shù)據(jù)量不大械筛,可以全部加載到內(nèi)存中捎泻。
維表的數(shù)據(jù)量比較大加入LRU緩存,異步記載并部分加載到內(nèi)存中埋哟。
還可以不用緩存純異步生成DataStream
異步調(diào)用官方圖:
代碼閱讀流程圖
運行模式支持
目前開源的支持本地測試笆豁,Standalone、yarn和yarnPer模式