面向HSAP架构的Flink流批一体实时数仓设计与研究

2024-12-20 00:00樊雷
电脑知识与技术 2024年30期

关键词:HSAP;Flink;实时数仓;流批一体;Iceberg

1 HSAP 架构适用场景

在企业数据量相对较小时,传统的在线事务处理(OLTP) 数据库可以满足基本的分析需求。然而,随着数据量的爆炸式增长以及分析需求的日益复杂,OLTP 数据库在处理海量数据和复杂查询时显得力不从心。为了解决这一问题,离线分析处理(OLAP) 和数据仓库等技术应运而生。数据仓库作为一种面向分析的数据库系统,旨在解决数据冗余、查询效率和数据一致性等问题,为企业提供高效的数据分析和决策支持。

混合服务分析处理(HSAP) 架构应运而生,旨在满足企业对实时数据分析日益增长的需求。HSAP架构能够处理更大规模的数据,包括来自机器学习、深度学习和日志等非事务型数据,并支持实时数据摄取、毫秒级查询延迟以及流批一体的数据处理能力,无须进行传统的离线ETL过程。

与混合事务分析处理(HTAP) 架构相比,HSAP架构更加注重分析性能和吞吐量,在处理海量非事务型数据时具有显著优势。HSAP架构通常采用多种开源组件构建,例如Kafka、Flink、HBase、Hive、Druid和ClickHouse 等,以解决数据孤岛、数据一致性和弹性伸缩等问题。这种架构能够有效避免数据冗余,降低成本,并提供秒级甚至亚秒级的查询延迟,为实时决策提供支持。

HSAP和HTAP都是现代数据架构的重要组成部分,它们分别适用于不同的应用场景。随着企业互联网、物联网和人工智能应用的快速发展,HSAP架构在处理海量数据、提供实时分析能力方面将发挥越来越重要的作用。

2 海量数据查询效率的痛点和困境

随着数字化转型的不断深入,企业对实时数据分析的需求日益迫切。实时分析、实时推荐、实时营销和实时风控等场景的兴起,对数据处理的实时性提出了更高的要求。然而,在海量数据的背景下,从数据产生到最终消费的整个链路中,许多因素都可能导致查询效率的下降。

2.1 多样化的实时业务场景和复杂的分析链路

实时大屏、BI报表、用户画像、预警监控和实时风控等实时应用场景对数据的实时性提出了很高的要求KfJ/Acws6j2j44fBTfKV3g==。这些场景通常需要从多个数据源读取数据并进行复杂分析,这给数据源带来了巨大的读写压力。同时,由于分析链路难以复用,容易导致重复开发和“烟囱式”系统架构,增加开发、运维成本和数据一致性维护的难度。

2.2 海量数据分析场景效率低下

企业通常使用MySQL、PostgreSQL、Oracle 等OLTP数据库来存储交易流水等结构化数据。OLTP 数据库在处理高并发事务方面表现出色,但在面对复杂的分析查询(如聚合、窗口函数和分组等)时效率较低,且对流式数据的支持有限。此外,海量数据的持续涌入也给OLTP数据库带来了巨大的压力,影响了实时业务的稳定性。

2.3 数据孤岛和数据格式多样性

企业数据来源多样化,包括来自应用程序的点击流数据、存储在KV数据库中的维度信息以及关系型数据库中的交易记录等。这些数据格式各异,存储位置分散,形成了一个个“数据孤岛”。如何将这些数据进行整合、清洗、转换并加载到数仓中,是构建实时数仓面临的一大挑战。

数据孤岛、数据格式不统一和数据分析效率低下等问题严重制约了企业实时数据分析能力的提升。为了解决这些问题,需要构建一个系统化的实时数仓架构,并选择合适的工具和技术来应对海量数据的挑战。

3 流批一体实时数仓的优势

为了满足企业对数据实时性的需求,数据仓库架构经历了从离线数仓到实时数仓的演变过程。Lambda架构作为早期实时数仓的代表,通过同时维护实时和离线两条数据处理路径来满足实时和批处理需求,但存在开发和运维复杂度高的问题。为了克服Lambda架构的缺点,Kappa架构应运而生,它只保留一条实时数据处理路径,简化了系统架构。然而,Kappa架构在处理历史数据回溯和数据修正等方面存在不足。为了进一步弥补Kappa架构的不足,流批一体的实时数仓架构逐渐成为主流,它结合了Lambda 和Kappa架构的优点,采用统一的存储格式和处理引擎,实现了真正的流批一体。

流批一体的实时数仓架构融合了传统离线数据仓库和实时数据仓库的优势,兼具高吞吐、低延迟和数据一致性等特点。通过采用统一的数据处理引擎和存储格式,流批一体架构能够有效避免数据冗余,简化数据处理流程,降低开发和运维成本,为企业提供更加高效、灵活的数据分析能力。

实时数仓是指将实时数据和批量数据的处理过程统一起来,以便更高效地处理和分析数据。这种方法可以帮助企业更好地理解其数据,并做出更明智的决策。实时数仓可以对接很多外部应用,例如:用户画像、精准推荐系统可针对性地推送营销活动,做到“千人千面”;BI实时大屏可将企业总体交易数据图表化;实时监控能让运维及时感知服务和主机运行的风险;风控反欺诈可对业务运行数据做展示,配合告警阈值系统,实时监控用户行为和订单量异常等风险因子;即席查询可应对分析师灵光一现的突发查询需求。数据处理系统在逻辑上采用实时数仓的逻辑分层来实现数据的逐级深入处理和数据的高复用性。实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据的复用性和复杂分析的可拆分[1]。

在实时数仓基础平台,为了更好地利用数据,需要将其划分为原始数据层(ODS) 、数据明细层(DWD) 、数据汇总层(Data Warehouse Middle,DWM) 、数据统计层(Data Statistics Layer,DSL) 以及用来存放维度信息的维度层 (DIM)[2]。ODS层负责从各种数据源实时接收原始数据,进行初步的格式转换与存储,通过完整性检查和监控机制来保障数据质量。DWD层在ODS 之上,对原始数据进行清洗、整合和事件建模,以满足更细粒度的分析需求,采用ETL流程监控和数据审计确保数据的准确性。DWM 层专注于汇总和聚合DWD层的数据,支持多维分析和实时更新,利用一致性校验和定期健康检查来维护数据的可靠性。ADS 层面向具体应用,提供定制化的数据服务,帮助业务决策,它通过API接口与用户交互,同时借助用户反馈和数据版本管理不断优化服务。

在HSAP架构中,ODS原始层是对各类数据源的接入映射,例如业务方写入Kafka的各类主题、MySQL 等数据库的Binlog原始数据。ODS主要侧重数据摄取和简单存储,是上层的数据来源。由于Flink等流计算平台具有丰富的连接器可以适配各种外部系统,且提供了丰富的自定义接口,各类异构的数据源接入变得轻而易举。DWD明细层通常是经过清洗过滤等规范化操作后的各类主题的事实表,例如订单交易数据、浏览数据等,而DIM维度表则保存了数据中ID与实际字段的映射关系,以及其他变化缓慢但可以用来补充宽表的数据。

如图3所示,DWS汇总层的数据是从明细层和维度层关联而来的。由于ClickHouse等OLAP工具对关联(JOIN) 的性能较弱,因此可以采用Flink来实现流式数据的高效动态JOIN,并将实时的关联数据定义为宽表并写入Click⁃House以供应用层后续分析查询。由于ClickHouse等OLAP引擎的强劲性能,海量数据的分析效率低下等问题也可以得到一定程度的解决。

ADS 应用层承担了各类数据应用的基础设施,例如KV存储、数据库服务、搜索服务、实时大屏、用户画像等,为外部应用服务提供支持。实时数仓的应用层的数据来源于汇总层的各类多维主题宽表和汇总表,例如营销汇总表、活动汇总表、商品汇总表等。这样,业务方只需要从不同的主题汇总表中读取数据,无须再单独对各类数据源做一整套分析链路。如果宽表字段设计合理,内容足够丰富的话,可以大大缓解开发慢的问题。

这个架构在初期应用时较为顺利,在大多数公司中约90%的场景下采用此架构。但是随着业务越来越多,越来越复杂,每天都有新的报表,每天都有新的业务场景,就会发现每一个业务调整的时候,都要从源头一步步调整,包括表结构、加工脚本、历史数据重刷等,最后造成整个数据加工的链路会变得数据冗余、成本高、开发周期长甚至数据不一致。其缺点明显:ETL逻辑复杂,存储、时间成本过高;数据处理链路非常长;无法支持实时或近实时的数据,只能处理T+1的数据。

4 Flink 流批一体实时数仓架构设计

在实时数仓应对负载均衡时,Kafka可以用来削峰,当在数据产生的峰值时刻,用Kafka暂存数据积压消息,等到峰值过去再对Kafka中的数据进行消费,防止峰值并发导致消费端系统过载[3]。

实时数据仓库通过流处理引擎实现实时数据的预处理过程,通过对输入的数据进行过滤、聚合、关联或其他自定义操作减少了上层业务数据面对分析型任务时的数据处理时间,Flink是目前最流行的流处理引擎之一,被广泛应用于各大企业的实时数据仓库中[4]。

Flink与Iceberg的结合使得实时流处理与高效数据存储形成有机协同,共同提升数据处理效率与可用性。Flink的状态管理与Ice⁃berg的ACID支持共同确保数据在流转过程中的一致性与可靠性,满足现代数据应用对质量的高要求。两者的组合减少了系统复杂性,实现了数据处理流程的简化,降低了开发与运维成本,提高了团队的工作效率。Flink与Iceberg的结合不仅能处理传统的流和批场景;还适用于实时分析、机器学习等复杂应用,为企业带来更大的数据价值。

在通用架构中引入Iceberg,可以实现流式读写和批量读写。对于实时链路而言,可以在一定程度上代替Kafka 等传统流式数据管道;对于需要读取中间层的数据等特殊需求,又可以便捷使用常见的批处理分析工具来直接分析Ice⁃berg 数据文件。Iceberg 高效的历史数据回溯能力,可以快速从特定的时间点开始重新消费数据,解决了数据保存期过短、历史数据被清理而难以回溯等传统数据管道面临的挑战。Flink 实时计算服务主要为Kafka 集群中存储的电商平台数据提供层间转换应用程序[5]。

Iceberg支持Flink SQL流式写入和增量拉取,有效解决了小文件过多的问题。Flink(Spark) 上层引擎可以周期性地调用接口进行小文件合并。流计算和批计算的存储进行了统一,也就是统一到Iceberg/HDFS上。数据中间的各层数据,都支持OLAP的实时查询。Iceberg 还支持较为完整的OLAP生态。例如支持Hive、Spark、Presto、Impala等OLAP查询引擎,提供高效的多维聚合查询性能。ClickHouse、Kafka、Hbase等各个组件相互结合,满足了企业中所有数据的分发和存储需求,企业运营部门能够根据这些数据调整营销策略方向,为企业的战略制定和角色指导提供相应的数据分析和存储能力[6]。

基于HSAP架构的Flink流批一体的实时数仓仍是一个新兴技术,整个过程还没有完全经过时间和业务的考验,可能还存在设计上的不足[7]。数据仓库的云化趋势将会持续发展,越来越多的企业将选择将数据仓库迁移到云平台,以降低成本、提高灵活性和扩展性;同时,大数据技术的发展将为数据仓库带来更多的创新和可能性,例如实时分析、机器学习等;随着人工智能和机器学习技术的不断成熟,数据仓库将朝着智能化和自动化的方向发展,通过智能化的数据分析和自动化的数据处理,企业可以更快地发现商业洞察,并提高决策的准确性和效率;数据湖的概念和技术将逐渐成熟,并与数据仓库相互融合,实现结构化数据和非结构化数据的统一管理和分析;多模式分析技术的发展将使数据仓库具备更多样化的分析能力,满足企业不同层次和不同类型的分析需求。

5 结束语

HSAP架构的Flink流批一体实时数仓凭借其低延迟、高吞吐量的特点,正在成为大数据处理领域的重要解决方案。它通过统一流处理和批处理模型,不仅简化了数据操作流程,还提升了实时决策支持的能力,使企业能够迅速响应市场变化。这一架构在金融、电商、智能制造等行业展现出了强大的数据应用价值,通过精准营销和故障检测等手段,推动业务增长与效率提升。

实时数仓将与人工智能、机器学习等先进技术深度融合,推动自动化分析和智能决策。随着边缘计算的发展,将进一步增强实时数据处理的能力,特别是在物联网场景下。此外,自适应资源管理和多模态数据处理能力的提升,将为数据驱动的创新提供更广泛的可能性。HSAP架构的Flink流批一体实时数仓不仅是当前的应用趋势,未来必将重塑大数据生态系统的核心。