Ververica&Flink运维之五实时数仓

B站Flink教程视频观看

实时数仓建设目的

1
2
3
4
5
解决由于传统数据仓库数据时效性低解决不了的问题
面向主题的
集成的
相对稳定的
处理上一次批处理流程到当前的数据

应用场景

1
2
3
4
5
6
7
8
实时OLAP分析
扩展现有OLAP分析工具支持实时数据分析
实时数据看板
实时播报核心数据
实时特征
实时计算实体特征,进行精准运营
实时业务监控
核心业务指标实时监控,预警

如何建设

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
概念映射
离线数仓 实时数仓
编程接口 HQL+UDF FlinkSQL+UDF
Runtime MR/SparkJob FlinkStreaming
数仓抽象 HiveTable StreamTable
物理存储 HDFS Kafka

整体架构
数仓层次更少
尽量减少层次的划分,应用层数据直接写入应用数据库,仓库内不维护应用层
多种数据源存储
实时数仓使用Kafka存储明细与汇总数据
Tair,HBase等缓存存储维度数据

ODS层建设
Binlog,流量日志,系统日志
数据来源尽可能统一
利用分区保证数据局部有序

DW层的建设
解决原始数据中数据存在噪声,不完整和数据形式不统一的情况
形成规范,统一的数据,如果可能的话尽可能和离线保持一致
数据解析->业务整合->脏数据清洗->模型规范化

附带信息应对实时数据的常见问题
内容->生成逻辑->解决问题
唯一键->标记唯一一条数->解决重复数据问题
主键->标记唯一一行数据->分区保证数据有序
版本->对应表结构的版本->解决表结构变化的问题
批次->当数据发生重导时更新批次->解决数据重导

维度数据建设
变化频率低的维度
可以通过将离线仓库的维表数据,同步到缓存
或者通过公共服务提数据
通过维表服务查询,对用户屏蔽细节
变化频率高的维度
通过维度数据的变化的消息构建拉链表
通过事实数据计算衍生维度构建拉链表
注意:可以利用HBase的MIN_VERSIONS方便的构建类似于拉链表的结构

维度的使用
利用UDTF关联
通过使用开发UDTF,利用LATERAL TABLE进行关联
通过重新生成SQL
解析SQL识别维表,以及维表中的字段将原查询转化为:原表.flatMap(维表)

汇总层的建设
对共性指标统一加工
大数据去重指标计算时,可以考虑使用非精确去重减少内存使用
Flink丰富的时间窗口
使用时间窗口后,要设置对应的State的TTL设置
根据主题进行多维汇总
直接使用GroupBy语句,需要转化成append流才能写入Kafka
衍生维度的统一加工
可以利用HBase的版本机制构建实时维表

数仓质量保证

1
2
3
4
5
6
7
元数据与血缘关系
通过元数据服务生成Catalog
解析DDL语句创建更新表
作业信息和运行状态写入元数据

数据质量验证
实时数据写入Hive,使用离线数据持续验证实时数据的准确性