天天看点

美团 基于Flink 实时数仓概述1.实时数仓概述

1.实时数仓概述

1.1实时数仓产生背景

传统的OLTP数据库: 面向事务处理、面向业务、进行增删改查、反映最新状态

数据仓库: 面向主题、集成、相对稳定、反应历史变化

1.2离线数仓架构

美团 基于Flink 实时数仓概述1.实时数仓概述

1.3实时数仓架构

1.3.1实时数仓的Lambda架构

美团 基于Flink 实时数仓概述1.实时数仓概述

1.3.2实时数仓的kappa架构

美团 基于Flink 实时数仓概述1.实时数仓概述

1.3.3实时数仓的OLAP变体

美团 基于Flink 实时数仓概述1.实时数仓概述

2.基于Flink实现典型的ETL场景

2.1维表join-预加载维表

方法1:将维表加载到内存关联 (DB数据库)

实现RichFlatMapFunction,在open()方法中读取数据库

代码实现: 关注 LarkMidTable 交流

方法2:利用Flink的分布式缓存 (文件)

实现通过env.registerCachedFile注册文件,在open()方法中进行获取

代码实现: 关注 LarkMidTable 交流

方法3:将维表存入到redis中 (nosql数据库)

代码实现: 关注 LarkMidTable 交流

方法4:利用Flink的广播变量(实时流)

代码实现: 关注 LarkMidTable 交流

方法5:创建临时表,使用FlinkSql进行清洗

代码实现: 关注 LarkMidTable 交流

2.2双流join

方法1:Regular join,FlinkSQL构造两个表,离线批处理,保持全量的数据。

Flink支持:inner join ,left outer join, right outer join, full outer join

代码实现: 关注 LarkMidTable 交流

方法2:intderval join,FlinkSQL根据业务规则,清除数据,

例如:

leftKeyedStream
  .intervalJoin(rightKeyedStream)
  // 时间间隔,设定下界和上界
  .between(Time.minutes(-10),Time.seconds(0))
  // 不包含下界
  //.lowerBoundExclusive()
  // 不包含上界
  //.upperBoundExclusive()
  // 自定义ProcessJoinFunction 处理Join到的元素
  .process(ProcessJoinFunction)      

代码实现: 关注 LarkMidTable 交流

方法3:window join,FlinkSQL根据窗口来进行划分数据,清理数据

stream.join(otherStream)
    .where(<KeySelector>)
    .equalTo(<KeySelector>)
    .window(<WindowAssigner>)
    .apply(<JoinFunction>)      

代码实现: 关注 LarkMidTable 交流

# 技术交流

一个人走的很快,一群人走的更远。

扫描下面的QQ二维码加入Lark的数据中台开源社区,并为你提供全程免费服务,你也可以与其他伙伴交流大数据技术,如果觉得项目不错,可以star关注,LarkMidTable团队将十分感谢您的关注!

QQ群1群【678097205】已满

微信公众号 【LarkMidTable】

关注官方微信公众号,回复加群,会发送社区微信群二维码,扫描二维码可加入群聊!

继续阅读