因公司產品需要用到Flink和動態維表關聯的功能。但Flink目前截至1.8版本還不支持這種維表的join操作,需要在阿里給Flink貢獻的 Flink Aysnc I/O 功能上再做封裝,則在GitHub上找到了FlinkStreamSQL開源項目,并記錄下了代碼閱讀記錄。
核心方法
其實很簡單使用Apache Calcite把SQL抽象成語法樹,如果遇到join語句就把這個語句拆出來,專門做處理,使用Flink底層api生成新的DataStream,然后在做join,這樣就變成流與流之間Flink語法支持的join了。
維表的數據量不大,可以全部加載到內存中。
維表的數據量比較大加入LRU緩存,異步記載并部分加載到內存中。
還可以不用緩存純異步生成DataStream
異步調用官方圖:
image.png
代碼閱讀流程圖
本地模式SQL解析流程.jpg
運行模式支持
目前開源的支持本地測試,Standalone、yarn和yarnPer模式
ClusterMode分類.jpg