微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

美团 基于Flink 实时数仓 概述

1.实时数仓概述

1.1实时数仓产生背景

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

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

1.2离线数仓架构

离线数仓

1.3实时数仓架构

1.3.1实时数仓的Lambda架构

lambda架构

1.3.2实时数仓的kappa架构

kappa架构

1.3.3实时数仓的OLAP变体

olap架构

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】

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

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐