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

news2024/11/15 10:13:22

        目前比较流行的实时数仓架构有两类,其中一类是以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社区的快速发展,对于组件的特性支持越来越丰富。对于文中涉及到的一些技术点并没有展开发挥,这部分内容陆续会在博客的其他文章中继续讨论。如果你对实时数仓架构有独到的见解,欢迎留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20232831 2023-2024-2 《网络攻防实践》第4次作业

目录 20232831 2023-2024-2 《网络攻防实践》第4次作业1.实验内容2.实验过程(1)ARP缓存欺骗攻击(2)ICMP重定向攻击(3)SYN Flood攻击(4)TCP RST攻击(5)TCP会话…

ocr之opencv配合paddleocr提高识别率

背景1:在这篇文章编写之前使用到的工具并不是opencv,而是java原有的工具BufferedImage。但因为在使用过程中会频繁切图,放大,模糊,所以导致的jvm内存使用量巨大,分秒中都在以百兆的速度累加内存空间。这种情…

docker可视化界面 - portainer安装

目录 一、官方安装说明 二、安装portainer 2.1拉取镜像 2.2运行portainer容器 2.3登录和使用portainer 一、官方安装说明: Install PortainerChoose to install Portainer Business Edition or Portainer Community Edition.https://www.portainer.io/install…

本地部署大模型的几种工具(上-相关使用)

目录 前言 为什么本地部署 目前的工具 vllm 介绍 下载模型 安装vllm 运行 存在问题 chatglm.cpp 介绍 下载 安装 运行 命令行运行 webdemo运行 GPU推理 ollama 介绍 下载 运行 运行不同参数量的模型 存在问题 lmstudio 介绍 下载 使用 下载模型文件…

OSCP靶场--plum

OSCP靶场–plum 考点(CVE-2022-25018 linux邮箱信息收集提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.28 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 05:41 EDT Nmap scan report for 192.168.178.2…

第十二章 微服务核心(一)

一、Spring Boot 1.1 SpringBoot 构建方式 1.1.1 通过官网自动生成 进入官网:https://spring.io/,点击 Projects --> Spring Framework; 拖动滚动条到中间位置,点击 Spring Initializr 或者直接通过 https://start.spring…

【项目技术介绍篇】若依管理系统功能介绍

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

RTOS线程切换的过程和原理

0 前言 RTOS中最重要的一个概念就是线程,线程的按需切换能够满足RTOS的实时性要求,同时能将复杂的需求分解成一个个线程执行减轻我们开发负担。 本文从栈的角度出发,详细介绍RTOS线程切换的过程和原理。 注:本文参考的RTOS是RT-T…

硬件项目中的turn-key 是啥意思?案例应用

在硬件项目中,turn-key是指一种工程项目模式,即交钥匙工程。这种模式通常由独立的第三方软件厂商直接与芯片厂商合作,基于芯片厂商的硬件方案和协议,集成成熟的上层软件和应用,并整套提供给电子产品生产厂商。这种模式…

实现DevOps需要什么?

实现DevOps需要什么? 硬性要求:工具上的准备 上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下: 代码管理(SCM):GitHub、GitLab、BitBucket、SubV…

UE小:基于UE5的两种Billboard material(始终朝向相机材质)

本文档展示了两种不同的效果,分别是物体完全朝向相机和物体仅Z轴朝向相机。通过下面的演示和相关代码,您可以更加直观地理解这两种效果的差异和应用场景。 1. 完全朝向相机效果 此效果下,物体将完全面向相机,不论相机在哪个角度…

语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!

电竞行业的发展带动其周边产业的发展,绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大,电竞游戏直播、游戏教程短视频也备受人们喜爱,自然,像游戏陪练、代练行业也随之生长起来,本文就来讲讲,从软件开发角…

阿里云服务器多少钱一年?阿里云价格表新鲜出炉4月最新报价

2024年阿里云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

PHP开发全新29网课交单平台源码修复全开源版本,支持聚合登陆易支付

这是一套最新版本的PHP开发的网课交单平台源代码,已进行全开源修复,支持聚合登录和易支付功能。 项目 地 址 : runruncode.com/php/19721.html 以下是对该套代码的主要更新和修复: 1. 移除了论文编辑功能。 2. 移除了强国接码…

Linux(CentOS)/Windows-C++ 云备份项目(客户端文件操作类,数据管理模块设计,文件客户端类设计)

文章目录 1. 客户端文件操作类2. 客户端数据管理模块设计3. 文件客户端类设计项目代码 客户端负责的功能 指定目录的文件检测,获取文件夹里面的文件 判断这个文件是否需要备份,服务器备份过的文件则不需要进行备份,已经备份的文件如果修改也…

纯分享万岳外卖跑腿系统客户端源码uniapp目录结构示意图

系统买的是商业版,使用非常不错有三端uniapp开源代码,自从上次分享uniapp后有些网友让我分享下各个端的uniapp下的各个目录结构说明 我就截图说以下吧,

【python】网络编程socket TCP UDP

文章目录 socket常用方法TCP客户端服务器UDP客户端服务器网络编程就是实现两台计算机的通信 互联网协议族 即通用标准协议,任何私有网络只要支持这个协议,就可以接入互联网。 socket socke模块的socket()函数 import socketsock = socket.socket(Address Family, type)参…

网络套接字补充——UDP网络编程

五、UDP网络编程 ​ 1.对于服务器使用智能指针维护生命周期;2.创建UDP套接字;3.绑定端口号,包括设置服务器端口号和IP地址,端口号一般是2字节使用uint16_t,而IP地址用户习惯使用点分十进制格式所以传入的是string类型…

<深度学习入门学习笔记P1>——《深度学习》

一、深度学习概述 1.深度学习入门概念及介绍 注: (1)感知机是深度学习网络算法的起源,神经网络是深度学习算法的中心。 (2)损失函数和梯度下降是用来对模型优化和训练的一种方式。 (3&#xff…

AugmentedReality之路-显示隐藏AR坐标原点(3)

本文介绍如何显示/隐藏坐标原点,分析AR坐标原点跟手机的位置关系 1、AR坐标原点在哪里 当我们通过AugmentedReality的StartARSession函数打开AR相机的那一刻,相机所在的位置就是坐标原点。 2、创建指示箭头资产 1.在Content/Arrow目录创建1个Actor类…