千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  应聘面试  >  大数据面试题  > Flink维表Join方式?

Flink维表Join方式?

来源:千锋教育
发布人:wjy
时间: 2022-09-02 15:42:14 1662104534

1. 直接加到内存,起一个线程定时更新维表。

# 优点:实现简单

# 缺点:适用于维表不是太大,维度更新不频繁场景

# 适用场景:维表小,变更频率低,对变更及时性要求低

2. 通过Distributed Cache 分发本地维度文件到task manager后加载到内存关联。

* 通过env.registerCachedFile注册文件。实现RichFunction,在open()中通过RuntimeContext获取cache文件。

# 优点:不需要外部数据库

# 缺点:支持维度数据量比较小,更新需要更改文件并重启作业

# 适用场景:维度数据是以文件形式,数据量小,更新频率低。

比如:静态码表,配置文件。

Flink维表Join方式?

3. 热存储关联:利用Flink的RichAsyncFunction读取外部存储的数据到缓存中,我们在关联维度表时先去查询缓存,如果缓存中不存在这条数据,就利用客户端去查询外部存储,然后插入到缓存中, 可以使用 Guava 库提供的 CacheBuilder 来创建缓存。

外部存储可以是HBase,Redis等

* 这里需要特别注意的是,我们用到了异步 IO (RichAsyncFunction),这个功能的出现就是为了解决与外部系统交互时网络延迟成为系统瓶颈的问题。

# 优点:维度数据不受限于内存,支持较多维度数据

# 缺点:需要热存储资源,维度更新反馈到结果有延迟(热存储导入,cache) # 适用场景:维度数据量大,可接受维度更新有一定的延迟。

4. Broadcast 流 1. 将维度数据发送到Kafka作为流S1。事实数据是流S2。

2. 定义状态描述符MapStateDescriptor,如descriptor。

3. 结合状态描述符,将S1广播出去,如S1.broadcast(descriptor),形成广播流(BroadcastStream) B1。

4. 事实流S2和广播流B1连接,形成连接后的流BroadcastConnectedStream BC。

5. 基于BC流,在KeyedBroadcastProcessFunction/BroadcastProcessFunction中实现Join的逻辑处理。

# 优点: 维度变化实时感知

# 缺点: 需要将维度变化数据转换为Kafka流,维度数据保存在内存中,支持的数据量相对较小

# 使用场景: 维度数据量小,维度变化敏感

5. Flink SQL 实现维表Join

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT