实时数仓架构设计思路数据流转与处理,需要综合考虑投入产出
优采云 发布时间: 2021-08-11 02:15实时数仓架构设计思路数据流转与处理,需要综合考虑投入产出
01 什么是实时数据仓库
首先要明确什么是实时数据仓库。百度百科和维基百科均未给出具体说明。什么是实时数据仓库?是否可以通过实时流式获取实时数据,即实时数据仓库?换句话说,流批处理集成是实时数据仓库?还是完全采用实时方式,采集和实时计算都是实时数据仓库?
对于这个问题,不同的公司可能有不同的答案。有些人认为提供实时广告牌或实时报告是实时数据仓库;其他人可能认为数据仓库提供的数据必须是实时的才能被认为是实时数据仓库。事实上,这个问题没有标准答案。不同的人、场景和公司对它的理解不同。记得有个老板讲过管理岗位和技术岗位的区别,其中之一是:
对于一件事或需要,T帖子的答案很明确:要么可以做,要么不能做; M贴的回答看似明确,但其实有多种解读。 [这不是老油条吗,哈哈]
所以从不同的角度解读实时数仓,实时数仓的定义是不同的;一般有几种定义:
可以看出理解不同,构建实时数据仓库的复杂度也不同。但最终构建什么样的实时数仓还是由业务驱动,需要综合考虑输入输出。
02 实时数据仓库架构设计思路
实时或离线数据仓库中的数据流向和处理基本类似于下图,因为分层是一种非常有效的数据管理方式,所以说到如何管理实时数据仓库,首先要考虑的是处理逻辑也是分层的。
从上图可以看出,在设计实时数据仓库解决方案时,需要考虑以下几点(不是设计最强大的技术方案,而是设计的方案最适合业务场景和资源。;有时候厉害的技术方案会增加技术复杂度和运维难度,考验我们的控制能力,所以我们选择的不是技术含量最高的方案,而是最适合我们实际情况的方案):
数据集成和存储层流批量集成主要产生以下问题:
03 几种实时数据仓库架构分析
根据这些是否集成:“数据是否集成,流和批处理是否集成,存储层是否与批处理流集成”,“ETL逻辑流是否与批处理集成”,“是否ETL计算引擎与“流批处理”集成,不同流集成。这种组合将设计一个不同的实时数据仓库架构。比较经典的架构有Lambda和Kappa;还有美团实时数仓架构(实时数据生产+实时分析引擎)和阿里的流批集成架构(Lambda+Kappa),以下是对这些实时数仓架构的总结。 Lambda 数据仓库架构
/img?url=https://mmbiz.qpic.cn/mmbiz_png/DMP9YVibia1dTMnWNo6GXJwWllW61yCNGq4501whOqgnmztjwDnjxN0BNFmGQDhicxWUtepJuT7r1YNP7O7xKwOjA/640?wx_fmt=png
Lambda 有 Batch Layer(批处理)和 Speed Layer(流处理)。然后将批处理和流结果拼接在一起。 Lambda 架构具有数据不变性的特性,可以避免人为引入错误问题,支持数据重新运行,分离复杂的流处理。但是,Batch Layer 和 Speed Layer 往往选择不同的组件,因为它们需要满足不同的场景。
而且,写过Storm的人都知道,Storm的代码写起来很痛苦(Trident会改进)。因此,我们需要准备两套代码。批处理和流处理必须实现相同的逻辑两次。
Lambda 架构问题:
Kappa 架构
Kreps 提出了另一个维度的思考,我们能否改进和使用流处理系统来构建大数据系统?提出以构建流为核心,构建数据系统。并且,通过重放历史数据来实现数据的重新运行。
这种以流处理为核心构建的数据系统,被Kreps称为“Kappa架构”。 Kappa 和 Lambda 都是希腊字母符号。这种架构比 Lambda 架构简单得多。就是把原来的批处理改为流处理。它没有Lambda架构中的Batch Layer、Speed Layer和Serve Layer。
/img?url=https://mmbiz.qpic.cn/mmbiz_png/DMP9YVibia1dTMnWNo6GXJwWllW61yCNGqZcegtqgURQYKqcOknIkoyfIZy8Xx0XehKzbLzTtWXKOuFCZPKrzE0A/640?wx_fmt=png
Lambda 架构问题:
实时数据生产+实时分析引擎
/img?url=https://mmbiz.qpic.cn/mmbiz_png/DMP9YVibia1dTMnWNo6GXJwWllW61yCNGqHiaxpKwsnl4115eiauXISHzejib8MkQXTFpmbfNM5b9FFEHlexWNDkdtQ/640?wx_fmt=png
上图是美团实时数据仓库的架构设计。数据从日志采集统一到消息队列,再到数据流的ETL过程。基础数据流的构建是统一的。之后,针对日志的实时性,实时大屏应用采用了实时流计算。
使用实时OLAP批处理进行Binlog业务分析。美团的实时数仓架构主要是为了解决实时OLAP在实时处理上的一些困难。
实时处理面临的几个困难:
Lambda+Kappa
从上图可以看出,阿里的实时数仓架构同时结合了Lambda和Kappa;数据整合不使用流批整合,分别通过实时采集和数据同步方式采集实现流和批数据。集成ETL逻辑流批,让用户只写一套代码,平台自动翻译成Flink Batch任务和Flink Stream任务,同时写入一个Holo表,完成对表达的统一计算层。存储层流和批分开存储,但可以实现流批存储的透明性,查询逻辑完全一致。
04 总结
架构设计不是设计最强大的技术方案,而是设计最适合业务场景和资源条件的方案。有时候很棒的技术方案会增加运维的技术复杂度和难度,需要更高的成本来控制。因此,我们选择的并不是技术最先进的方案,而是最适合我们实际情况的技术架构。
在实时数据仓库架构的设计中,主要考虑“数据集成是否与流和批处理集成,存储层是否与批处理集成”,“ETL逻辑流是否与批处理集成”,“ ETL计算引擎是否与流批集成”;权衡这些集成带来的问题,我们设计了适合业务场景的实时数据仓库架构。