Flink如何做维表关联

声明:本系列博客为原创,最先发表在拉勾教育,其中一部分为免费阅读部分。被读者各种搬运至各大网站。所有其他的来源均为抄袭。

《2021年最新版大数据面试题全面开启更新》

 

     在实际生产中,我们经常会有这样的需求,需要以原始数据流作为基础,然后关联大量的外部表来补充一些属性。例如:在订单数据中,希望能得到订单收货人所在省的名称,一般来说订单中会记录一个省的ID,那么需要根据ID去查询外部的维度表补充省名称属性。

     在Flink流式计算中,一些维度表属性一般存储在MySQL/HBase/Redis中,这些维度表数据存在定时更新,我们根据业务进行关联。根据业务对维表数据关联的时效性要求,有一下几种解决方案:

  • 实时查询维表
  • 预加载全量数据
  • LRU缓存
  • 其他

实时查询维表

     实时查询维表是指用户在Flink算子中直接访问外部数据库,比如用MySQL来进行关联。这种方式是同步方式,数据保证是最新的。但是,当流式计算数据过大,会对外部系统带来巨大的访问压力,一旦出现比如连接失败、线程池满等情况,由于使用的同步调研,所以一般会导致现场阻塞、Task等待数据返回,影响整体任务的吞吐量。而且这种方案对外部系统的QPS要求较高,在大数据实时计算场景下,QPS远远高于普通的后台系统,整体作业瓶颈转移到外部系统。
     这种方式的核心是可以在Flink的Map算子中建立访问外部系统的连接。下面以订单数据为例࿰