实时数仓之实时数仓架构(Hudi)

        目前比较流行的实时数仓架构有两类,其中一类是以Flink+Doris为核心的实时数仓架构方案;另一类是以湖仓一体架构为核心的实时数仓架构方案。本文针对Flink+Hudi湖仓一体架构进行介绍,这套架构的特点是可以基于一套数据完全实现Lambda架构。实时数仓架构图如下:

  • 技术框架

    • Kafka:用于接入数据源;

    • Flink CDC:如果直接接入业务数据源可以考虑CDC方式,如果通过Kafka缓冲接入业务数据可以忽略;

    • Flink:用于数据ETL,包括接入数据、处理数据及输出数据全链路数据计算任务;

    • Spark:用于数据ETL,包括处理数据及输出数据全链路数据计算任务;

    • Hudi:湖仓一体数据管理框架,用来管理模型数据,包括ODS/DWD/DWS/DIM/ADS等;

    • Doris:OLAP引擎,同步数仓结果模型,对外提供数据服务支持;

    • Hbase:用来存储维表信息,维表数据来源一部分有Flink加工实时写入,另一部分是从Spark任务生产,其主要作用用来支持Flink ETL处理过程中的Lookup Join功能。这里选用Hbase原因主要因为Table的Hbase Connector支持异步IO功能。

    • Hera:调度系统,用来调度离线Spark任务;

    • StreamX:Flink任务管理工具,用于部署管理以及监控Flink实时任务;

  • 数仓架构

    采用维度模型标准三层架构,ODS/DWD/DWS/DIM/ADS,分层架构符合Kimball维度模型建仓指导原则。

    • ODS层:增量方式接入业务数据和日志数据,ODS层分区保留当日增量结果,包含备份和支持下游数据源功能;

    • DIM层:维表加工分为几种情况:

      1. 静态维表/转码表/字典表这些日常不怎么变化的直接加载到Hudi即可,用于flink数据处理;如果应用端需要依赖这类表,Doris也得同步存储一份;

      2. 普通维表数据由Flink完成实时任务加工,由Spark任务完成离线数据修复,同时为了维表Join,维表还需要同步hbase一份(原因可以参考笔者另外一篇博客《Flink基于Hudi维表Join缺陷分析及解决方案》),同时结果同步Doris,供终端引用。

    • DWD层:维度模型设计,采用事务表建模(目的尽量将单表数据设计关系降低到最低)、易于ETL实现;实时数据装载由Flink驱动,通过对ODS流进行Join、聚合和转行操作、以及对外部表以Lookup Join方式清洗数据(切记不能过分冗余维度数据,底层对数据做分离是核心设计思想,冗余越是过分、维护成本越高),结果保存Hudi;离线任务修复由Spark实现,操作同一份数据,ETL要做好时间限制条件,避免离线任务影响实时任务,同时结果数据同步Doris,供终端引用;

    • DWS层:非必要不要轻易跨业务过程合并数据,其他参考DWD设计思路。

    • ADS层:面向业务场景编程,一套数据产品对应自己的一套数据,这里一般有两种实现思路可以参考:

      1. Flink/Spark驱动读取DWD/DWS/DIM数据加工ADS结果表,数据写入Hudi,同步Doris供下游引用;

      2. StarRocks高版本支持物化视图功能,可以借助物化视图实现ADS层;

    总结:无论是实时数仓还是离线数仓建设,问题根源一般来自于模型设计的不合理,要知道数据模型才是维度建模的灵魂,Kimball老爷子写了几百万字的著作,主要描述的是数据建模的思想。

  • Flink+Hudi实时数仓架构缺点

    基于Hudi湖仓一体架构虽然实时性比离线数仓要高很多,但是对比纯实时数仓而言,其延迟性一般在分钟级(到终端引用可能要延迟10~15分钟时间),对于某些实时性要求较高场景并不适合。

  • 常见问题

    • 数据源保序任务:一般来说接入数据源很难完全避免乱序场景发生,这种情况有两种方案可以参考:

      1. 事实表按照业务过程建设,一般业务过程数据不存在更新所以单个key也不存在重复发射的情况,即使存在数据重发,也可以通过ETL规则提前规避掉,这种思路对于下游数据任务加工都比较友好。

      2. 针对接入数据按照update_time保序,由于接入Append-Only流数据,通过保序任务会变成Retract流,这样后续依赖也要考虑回撤场景带来的问题。具体可以参考作者关于乱序场景的几篇文章。

    • 实时UV/PV计算:去重计数指标一直依赖都是数据仓库设计领域的难题,由于本架构采用了doris,所以这部分指标加工如果没有特殊要求可以通过doris的bitmap实现;另一种实现思路是借助redis hyperloglog(由于改架构避免不了Spark修复数据情况,所以一定场景下是可以接受实时数据差异的)能力,通过自定义UDF函数实现UV计算。这两种思路是实时UV常用的解决思路。

    • 历史实时数据对齐:如果底层面向业务过程设计,那么根据合理的时间戳属性,是可以严格区分历史数据和实时数据区别的,这种情况可以考虑通过离线数据补全缺失数据。这也侧面说明了模型设计的能力才是数据仓库的核心技能,其他方面的技能对于数仓建设的正面影响加到一起也不及模型设计能力的一部分。

    • Flink基于Hudi维表Join存在陷阱,详情请参看笔者另一篇博客《Flink基于Hudi维表Join缺陷分析及解决方案》。

  • 总结

            Flink和Hudi组合实现湖仓一体架构,目前也是业界讨论比较多的一套架构方案,这也得益于Flink和Hudi社区的快速发展,对于组件的特性支持越来越丰富。对于文中涉及到的一些技术点并没有展开发挥,这部分内容陆续会在博客的其他文章中继续讨论。如果你对实时数仓架构有独到的见解,欢迎留言讨论。

<think>好的,我现在需要回答用户关于搭建实时数仓所需技术和架构的问题。首先,我得回忆一下实时数仓的基本概念,以及它与传统数仓的区别。实时数仓的核心在于实时数据处理和分析,所以需要支持低延迟的技术组件。 接下来,我应该考虑实时数仓架构。常见的架构有Lambda和Kappa,但现在可能还有其他变种,比如实时数仓常用的分层结构,比如数据采集层、数据处理层、存储层、服务层等。需要把这些层次分清楚,并对应到具体的技术。 然后,技术选型是关键。数据采集方面,常用的有Kafka、Flume、Flink Connectors等。数据处理可能需要流处理框架,比如Flink、Spark Streaming,或者Kafka Streams。存储层的话,实时数仓可能需要OLAP数据库,比如ClickHouse、Doris,或者HBase、Hudi、Iceberg等。服务层可能涉及API网关、查询引擎如Presto或Druid。 另外,需要考虑数据建模,比如维度建模是否适用,或者是否需要其他模型来支持实时查询。数据治理方面,元数据管理、数据质量监控、血缘追踪等也是重要部分,可能需要工具如Apache Atlas。 还要提到架构设计的关键点,比如低延迟、高可用、可扩展性、一致性等。可能需要解释Lambda和Kappa架构的区别,以及为什么现在更多转向Kappa或者更简化的架构。 可能用户会关心具体的技术组合,比如Flink + Kafka + ClickHouse这样的组合是否可行,或者结合Hudi做湖仓一体。需要给出一个典型的技术栈例子,帮助用户理解。 同时,需要注意实时数仓的挑战,比如处理乱序数据、状态管理、Exactly-Once语义等,这些可能涉及技术组件的选择,比如Flink的优势在这里。 最后,确保回答结构清晰,分点列出技术和架构部分,可能用分层的方式解释,每层对应技术和作用。还要注意用户可能需要实际案例或应用场景,但用户没有具体问,所以点到为止即可。 总结步骤:先介绍实时数仓的概念,然后分架构和技术两部分详细说明,每部分再细分层次和对应的技术组件,最后总结关键点和可能的技术组合示例。</think>### 实时数仓技术架构详解 #### 一、核心架构分层 实时数仓通常采用 **分层架构** 以解耦处理流程,典型分层如下: 1. **数据采集层** - **作用**:实时采集多源数据(日志、数据库变更、IoT设备等)。 - **技术选型**: - **消息队列**:Apache Kafka(高吞吐、低延迟)、Pulsar(分层存储)。 - **日志采集**:Filebeat、Flume。 - **数据库同步**:Debezium(CDC工具)、Canal。 2. **数据处理层** - **核心能力**:流批一体处理、实时ETL、数据清洗。 - **技术选型**: - **流处理引擎**:Apache Flink(主导地位,支持精确一次语义、状态管理)。 - **轻量级处理**:Kafka Streams(适合简单ETL)。 - **混合处理**:Spark Structured Streaming(微批模式)。 3. **存储层** - **设计要点**:需同时支持 **高并发写入** 与 **低延迟查询**。 - **技术组合**: - **实时写入**:Apache Hudi/Iceberg(事务型数据湖)。 - **OLAP引擎**:ClickHouse(列式存储)、Doris(MPP架构)、StarRocks。 - **宽表服务**:HBase(随机读写)、Redis(热数据缓存)。 4. **服务层** - **关键功能**:提供统一查询接口、数据可视化、实时BI。 - **技术栈**: - **查询引擎**:Presto(联邦查询)、Doris SQL。 - **API服务**:GraphQL(灵活数据聚合)、RESTful API。 - **可视化**:Grafana(实时仪表盘)、Superset。 #### 二、典型架构模式 1. **Lambda架构**(逐渐被替代) - **组成**: - 批处理层(HDFS+Hive) - 速度层(Flink/Kafka) - 服务层(合并结果) - **痛点**:维护两套代码、数据一致性难保障 2. **Kappa架构** - **革新点**:仅保留流处理层,通过 **数据重放** 实现批处理需求 - **实现路径**: $$ \text{Kafka(持久化日志)} \xrightarrow{Flink} \text{OLAP存储} $$ - **优势**:架构简化,适合事件驱动型场景 3. **湖仓一体架构**(新兴趋势) - **核心思想**:将数据湖与数仓能力融合 - **技术栈**: $$ \text{Delta Lake/Hudi} \leftarrow \xrightarrow{Flink} \rightarrow \text{Doris/StarRocks} $$ - **特征**:支持ACID事务、Schema演进、版本回溯 #### 三、关键技术组件详解 1. **Apache Flink** - **核心优势**: - 精确一次语义(通过Checkpoint机制) - 事件时间处理(解决乱序问题) - 状态管理($State TTL$自动清理) - **典型应用**: ```sql CREATE TABLE user_clicks ( user_id STRING, click_time TIMESTAMP(3), WATERMARK FOR click_time AS click_time - INTERVAL '5' SECOND ) WITH (...); SELECT TUMBLE_START(click_time, INTERVAL '1' HOUR), COUNT(DISTINCT user_id) FROM user_clicks GROUP BY TUMBLE(click_time, INTERVAL '1' HOUR); ``` 2. **实时存储选型对比** | 存储系统 | 写入吞吐 | 查询延迟 | 数据更新能力 | 适用场景 | |------------|----------|----------|--------------------|------------------------| | ClickHouse | 高 | 亚秒级 | 仅追加 | 大宽表聚合查询 | | HBase | 极高 | 毫秒级 | 支持随机更新 | 点查、时序数据 | | Doris | 中高 | 秒级 | 支持批量更新 | Ad-hoc查询 | | Hudi | 中 | 分钟级 | 支持增量更新 | 近实时数据湖 | 3. **数据质量保障** - **端到端延迟监控**:Prometheus + Grafana监控pipeline延迟 - **Exactly-Once实现**: $$ \text{Kafka(幂等生产)} + \text{Flink(两阶段提交)} $$ - **数据一致性校验**:通过DWD层的唯一键校验(如$HASH(user_id,event_time)$) #### 四、实施路线建议 1. **场景驱动设计** - 广告实时投放:要求百毫秒级响应 → 选择Flink + Redis - 实时风控:复杂规则计算 → Flink CEP + HBase - 运营大盘:分钟级延迟可接受 → Flink + Hudi + Presto 2. **迭代优化路径** ```mermaid graph TD A[Kafka做原始日志收集] --> B[Flink ETL清洗] B --> C[写入Hudi数据湖] C --> D[Doris构建聚合层] D --> E[BI工具可视化] ``` 3. **常见陷阱规避** - **热点问题**:采用$user_id\%100$分桶避免数据倾斜 - **小文件问题**:Hudi的Clustering优化 - **资源隔离**:Flink生产消费组独立部署 #### 五、前沿发展方向 1. **流批一体存储**:Apache Paimon(原Flink Table Store) 2. **智能实时数仓**:集成ML模型进行实时预测 3. **Serverless化**:基于Kubernetes的弹性扩缩容 **总结**:实时数仓建设需以业务场景为锚点,通过Flink+消息队列+OLAP存储构建核心链路,同时结合数据湖技术实现灵活性与效率的平衡。技术选型时需重点评估数据更新频率、查询复杂度、一致性要求等维度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GawynKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值