实时数仓建设是当今企业数据处理和分析的重要趋势,而Flink和Doris作为领先的开源技术,提供了强大的实时数据处理和分析能力。本文将深入探讨基于Flink + Doris的实时数仓建设,从架构设计、数据流处理、数据存储等多个方面进行详细分析,帮助读者更好地了解和应用这一技术。
一、Flink + Doris简介
Flink是一种分布式流处理引擎,它具有低延迟、高吞吐量及容错处理的特点,非常适合处理实时数据流。而Doris是一款可扩展的分布式列式存储系统,它提供高性能且可靠的数据存储和查询能力。结合Flink和Doris,可以构建一个强大的实时数仓平台,为企业提供实时数据处理和分析的解决方案。
二、架构设计
实时数仓的架构设计是实现高效数据处理和分析的基础。在Flink + Doris实时数仓中,主要包含以下组件:数据源、数据处理、数据存储和数据查询。数据源可以是来自不同数据源的实时数据流,如消息队列、数据库或日志文件等。数据处理阶段使用Flink进行流式计算和转换,将原始数据清洗、聚合和计算,生成处理后的数据。处理后的数据通过Doris进行存储,提供高性能的数据存储和查询能力。最后,用户可以通过SQL语句查询Doris中的数据,进行数据分析和报表展示。
三、数据流处理
Flink具有灵活且易于开发的流处理API,可以实现丰富的数据流转换和计算操作。使用Flink进行数据流处理时,可以进行数据清洗、过滤、聚合和计算等操作,以满足不同的业务需求。同时,Flink还具备良好的容错处理能力,一旦发生故障,可以自动恢复并保证数据的一致性和准确性。
四、数据存储
Doris作为一个分布式列式存储系统,提供了高性能和可靠的数据存储和查询能力。它支持大规模数据的存储和并发查询,具有良好的数据压缩率和查询性能。Doris的数据存储采用分区表结构,可以根据业务需求进行水平扩展,实现数据的高可用和高并发处理。
五、数据查询
通过使用Doris提供的SQL查询接口,用户可以方便地查询和分析实时数仓中的数据。Doris支持复杂的多维数据查询,可以根据不同的维度和指标进行灵活和高效的数据分析。同时,Doris还提供了数据可视化和报表展示的功能,帮助用户更直观地理解和展示数据分析结果。
六、应用案例
Flink + Doris实时数仓在多个行业具有广泛应用。以电商行业为例,实时数仓可以帮助电商企业实现实时商品推荐、个性化营销和库存管理等业务。通过使用Flink进行数据实时处理和Doris进行数据存储和查询,电商企业可以更好地洞察用户需求,提供个性化的购物体验,从而提升销售业绩。
基于Flink + Doris的实时数仓建设为企业提供了强大的实时数据处理和分析能力。通过合理的架构设计、高效的数据流处理、可靠的数据存储和灵活的数据查询,实现了对实时数据的全面分析和应用。未来的数据时代,实时数仓建设将扮演更加重要的角色,为企业提供决策支持和业务优化的解决方案。
随着互联网的不断发展,数据的时效性对企业的精细化运营越来越重要,在每天产生的海量数据中,如何快速有效地挖掘出有价值的信息,对企业的运营决策有很大的帮助。
在该背景下,数仓建设就显得尤为重要。一般数仓也称传统数仓,数据通常以T+1的形式进行计算,时效性较差,因此,实时数仓的建设成了必然趋势,主要是为了解决传统数仓数据时效性的问题,一般用于实时分析、实时数据看板、业务指标实时监测等场景。
本期文章便为大家介绍实时数仓的基本原理,以及如何基于Flink+Doris搭建实时数仓。
1实时数仓介绍 为了更好地理解实时数仓的建设流程,在详细介绍其构建方法之前,先为大家科普下实时计算与实时数仓之间的联系与区别。
实时计算 普通的实时计算会优先考虑时效性,采集数据源后,经过实时计算直接得到计算结果。这样虽保证了时效性,但可能会存在大量的重复计算,导致更多的计算资源开销。
实时计算的基本计算流程
实时数仓 实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据和计算的复用性。在一定程度上减少了数据的重复计算,计算流程上会存在更多依赖关系,因此数据的时效性会略差一点。
实时数仓的基本计算流程
实时数仓作为数仓的一种形态,它包含面向主题、集成、相对稳定等数据仓库本身的特性。与传统数仓不同的是,一般不保留中间的计算结果,无法呈现中间的历史变化情况。在传统数仓中,数据分层是一个比较重要的工作环节,通常划分为ODS层、DWD层、DIM层、DWM层、DWS层及ADS层。
同样,在实时数仓中,也要对数据处理流程进行分层,分层如下: ODS层 原始数据层:也称贴源层、操作数据层,数据是最细粒度的,没做任何变动,如行为日志、系统日志和业务数据。 DWD层 明细数据层:保持和ODS层一样的数据颗粒度,主要是对ODS层数据做清洗和规范化操作,比如数据类型转换、数据对齐、数据过滤等。 DIM层(Hbase) 维度数据层:建立标准数据分析维度,可以降低数据计算口径和算法不统一风险,如时间维度、地区维度、产品维度、机构维度等。 DWM层 中间数据层:在DWD层的数据基础上,对数据做一些轻度聚合或关联操作,生成一些列的中间结果表,提升公共指标的复用性,减少重复加工处理,也可以和维度进行关联,形成宽表,其数据仍然是明细数据。 DWS层 汇总数据层:基于DWD或者DWM上的基础数据,根据主题划分将多个事实数据按维度进行聚合汇总,形成主题宽表。用于后续的业务查询、OLAP分析、数据分发等。 ADS层 应用数据层:提供给数据产品和数据分析使用,把OLAP分析引擎中的数据根据需要进行聚合筛选,并提供API接口服务。
2案例简介 背景: 此案例以应用访问的行为日志进行流量分析,从简单的对应用访问日志统计PV、UV功能入手,体验用户行为日志构建实时数仓的数据处理流程。从数据的收集到分层计算,再到最后的数据应用,讲述整个实时数仓的构建流程。
2.1架构设计 首先,收集数据源,主要包含行为日志、系统日志与业务数据:
行为日志直接通过日志服务接口写入到Kafka;
收集系统日志的常用方式为Flume+Kafka,最终将数据Sink到Kafka;
业务数据则通过FlinkCDC解析MySQL或者MongoDB的日志获取,同样将数据存储到Kafka,都作为ODS层数据存储;然后使用Flink计算引擎对ODS层数据进行ETL处理,并将处理好的数据进行分流,将业务产生的数据写回Kafka作为DWD层,维度数据则分流到HBASE中作为DIM层;通过Flink对明细数据与维度数据进行关联聚合,将聚合后的数据写入实时OLAP分析引擎(如:ClickHouse、Doris),最后通过实时分析引擎对数据进行聚合查询提供应用服务。如下图所示:
数据源收集及处理流程 从上图DWS层可以看到,实时数据分析引擎存储可以是多种组合,可以选择ClickHouse或者ApacheDoris,甚至可以是多种组件的组合,由此看出实时数仓构建方案的多样灵活,选择哪种实现方案,主要还要根据各自应用场景而定,没有哪一种OLAP引擎是万能的,比较常见的组合如下: Kafka+Flink+ClickHouse简称KFC Kafka+Flink+Doris简称KFD Kafka+Flink+其他实时OLAP引擎 2.2OLAP引擎选择(DorisVSClickHouse) Doris和ClickHouse两种OLAP引擎都具备一定的优势,分别如下: Doris和ClickHouse优势对比
那么,两者之间如何选择呢?建议如下: 1.业务场景复杂,数据规模巨大,希望投入研发力量做定制开发,选ClickHouse; 2.希望一站式的分析解决方案,少量投入研发资源,选择Doris。 3. 通过以上分析比较,本案例为基于简单的业务场景体验实时数仓的建设流程,因此选择KFD方案实现更加合适。且Doris支持事物和幂等写入,与Flink结合能更好地实现数据精准一次性(Exactly-Once)处理。
3案例详解 前文的案例简介中已明确描述,以应用访问的行为日志进行流量分析,从简单的对应用访问PV、UV功能入手,一步步探索实时数仓构建的流程。
3.1数据准备 首先,准备数据源,为方便起见,对后文用到的数据结构进行简单定义。 行为数据定义 行为日志是直接写到Kafka,作为数仓的ODS层,创建Kafka主题(topic)并按照ODS层的命名规则命名为ods_base_log,表结构如下所示: 行为日志表结构 数据结构如下所示: 行为数据结构 维度数据定义 行为日志中只包含了应用的id,为了体现出数仓的维度聚合,用FlinkCDC将MySQL的配置数据(应用列表)进行同步,将数据写入Kafka的ODS层,命名为ods_base_db。然后通过下一步处理,读取ODS层ods_base_db主题中的数据,并筛选出app_list维度数据,写到DIM层,存储于HBASE中,命名为dim_app_list,表结构如下所示: 维度数据表结构 数据结构如下所示: 维度数据结构
3.5ADS层数据应用 数据经过以上多个环节的流程处理,最终将DWS层的计算结果存储在Doris中,ADS层数据应用直接访问Doris存储的数据进行聚合查询即可。visitor_stats表的数据样例如下所示,其中表结构的顺序与PvUvStats对象属性保持一致,Doris的字段存储有一定要求,必须是key前置(维度前置),度量(pvCnt、uvCnt)后置。
visitor_stats表的数据样例 通过JDBC连接Doris进行查询操作。由于本次体验实时数仓的构建流程,以demo的方式进行讲解,所以在此就不对数据场景的应用进行讲解,通过MySQL客户端连接操作,体验Doris的实时数据查询即可,如下图所示:
实时数据查询示例 在实际应用中,通过JDBC的方式访问Doris做聚合查询,主要供下游的实时OLAP分析、实时数据看板、业务指标实时监等多种场景,支持高并发,毫秒级效应。
4划重点 实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据和计算的复用性。 通过整个实时数仓的建设流程探索,可以发现,数据在实时计算环节的流转过程,实际上和传统数仓非常相似,只是由Flink替代Hive作为了计算引擎,把数据的落盘存储由HDFS更换成了Kafka,但是数据模型的构建思路与数据处理的流转过程并没有发生太多的变化。