如何构建新一代实时湖仓?袋鼠云基于数据湖的探索升级之路

news2024/11/29 8:55:34

在之前的实时湖仓系列文章中,我们已经介绍了实时湖仓对于当前企业数字化转型的重要性,实时湖仓的功能架构设计,以及实时计算和数据湖结合的应用场景。

在本篇文章中,将介绍袋鼠云数栈在构建实时湖仓系统上的探索与落地实践,及未来规划。

数栈为什么选择实时湖仓

数栈作为一个数据开发平台,在未引入实时湖仓之前提供的是基于 Lambda 架构的开发模式,分了实时和离线两条链路,这种开发模式带来的问题在于:

· 复杂性高,需要维护流批双链路的不同组件

· 存储成本高,流批两个链路维护两份相同的数据

· 实时链路不可查,Kafka 中间数据查询困难,不支持随机查询,只支持顺序查询

· 数据口径一致性差,不同计算引擎难保证统一的数据口径

file

而实时湖仓则能够节省存储成本,极大地提升开发效率,并更快更好地挖掘数据价值。

· 提供了多样化的分析能力,不限于批处理、流处理,在交互式查询和机器学习方面都很友好

· 提供了 ACID 事物能力,可以更好的保障数据质量,并提供增删改查等功能,传统数仓则缺乏这一能力

· 提供了完善的数据管理能力,包括数据格式、数据 Schema 等

· 提供了存储介质可扩展的能力,支持 HDFS、对象存储、云上存储等

数栈基于实时湖仓的实践

下图便是基于实时湖仓的数栈解决方案结构图:

file

业务库中的数据我们通过自研的数据集成框架 ChunJun 进行实时采集和入湖,目前支持 Iceberg/Hudi 实时入湖。之后在数栈实时开发平台和离线开发平台中进行业务的开发,Flink 和 Spark 支持对接 Iceberg/Hudi,以及 Iceberg/Hudi source 指标展示。再通过 EasyLake 湖仓一体平台进行数据管理,如一键转表、湖表治理等。

基于此,实时湖仓很好地解决了上文提到的 Lambda 架构开发模式带来的痛点问题。实现了存储层和计算层的流批一体,实时链路中间数据可查,统一的数据口径,低成本存储,为企业带来更快、更灵活、更高效的数据处理体验,这就是数栈原则实时湖仓的原因。

下文将为大家重点带来实时入湖以及物化视图的介绍。

CDC 实时入湖

Flink CDC 是基于数据库日志的 CDC 技术,实现了全增量一体化读取的数据集成框架。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。不过 CDC 数据实时入湖也面临着不小的挑战:

· 实时性高:CDC 数据对实时性要求高,数据新鲜度越高,往往业务价值越高

· 历史数据量大:数据库的历史数据规模大

· 强一致性:数据处理必须要保证有序性而且结果需要一致性

· Schema 动态演进:数据库对应的 Schema 会随着业务不断变更

那么,数栈是怎么做的呢?

file

袋鼠云自研的数据集成框架 ChunJun 支持 CDC 数据的采集,包括 MySQL CDC、Oracle CDC、PG CDC、SQLServer CDC。CDC 数据采集完之后,写到 Iceberg/Hudi Sink 中,完成实时入湖的工作。

这样下来的整条链路和架构都是袋鼠云自主研发、完全可控的,并且实现了全增量一体化、分钟级时延,对业务稳定性也不会造成任何影响。

ChunJun:https://github.com/DTStack/chunjun.git

实时入湖落地中的问题

在实时入湖落地的过程中,我们当然也遇到过问题和挑战:

· 小文件问题:小文件影响读写效率,导致 HDFS 集群稳定性变差

· Hudi 适配 Flink1.12:客户群体使用的 Flink 版本大多还停留在1.12

· 跨集群入湖:多套 Hadoop 集群的场景下存在跨集群的需求

数栈又是如何个个突破这些问题的呢?

● 小文件问题优化

· 合理设置 Checkpoint Interval

整个 Compaction 过程是一个 I/O 比较多的操作过程,假设一味的调小 Checkpoint Interval,会产生诸如小文件问题、导致 HDFS 压力变大、checkpoint 失败、任务不稳定等一系列问题。

在经过多方实践验证后,推荐将 Checkpoint Interval 设置为 1-5 分钟为优。

· 平台化小文件治理

调整 Checkpoint,能够缓解小文件的产生,之后还要进行平台化的小文件治理,从根本上解决问题。

EasyLake 湖表治理功能支持数据文件治理,支持快照文件治理,支持 Hudi MOR 增量文件合并,将小文件数量控制在一定的范围内,提升治理效率。

file

● Hudi 适配 Flink 1.12 版本做法

数栈在这方面并不是一张白纸,首先我们基于 hudi-flink1.13.x 模块开发 hudi-flink1.12,将 Flink 版本修改成1.12.7,再针对不兼容的点逐个进行修复,最后进行完整的功能测试即完成了适配的工作。

file

· 跨集群入湖方案

Hudi 和 Iceberg Sink 默认从 HADOOP_CONF_DIR 环境变量获取 core-site.xml 和 hdfs-site.xml 访问对应的 HDFS。

数栈基于自研的 ChunJun,在 ChunJun iceberg-connector 和 hudi-connector 中对 hadoop conf dir 的获取方式进行扩展,支持通过指定 hadoopConfig 自定义参数的方式。

如此便能够使集群之间的数据流动起来,打破数据孤岛,完成跨集群入湖的支持。

file

ETL 加速探索-物化视图

在介绍数栈在物化视图方面的探索之前,必须先理清楚我们为什么需要物化视图?

在实时湖仓中包含三类任务,实时 ETL、离线 ETL 和 OLAP,以上三类任务在 ODS -> ADS 的加工过程中,都会出现聚合操作越来越多,IO 越来越密集,多个任务 SQL 中具有相同逻辑的 SQL 片段等现象。

物化视图可以将表连接或者聚合等耗时较多的结果进行预计算并将计算结果保存下来,在对复杂 SQL 进行查询的时候,直接基于上一步预计算的结果进行计算,从而避免耗时的操作,更快的得到结果。

而在实时湖仓中基于数据湖构建的物化视图可实现流、批和 OLAP 任务之间的共享,从而进一步降低实时数据湖中数据在整条链路中的延时。为实时加工链路加速,并节省计算成本,提高查询性能和响应速度。

● 实时湖仓中落地物化视图需要完成的内容

· 平台化数据湖物化视图管理

· Spark 支持基于数据湖表格式管理物化视图

· Trino 支持基于数据湖表格式管理物化视图

· Flink 支持基于数据湖表格式管理物化视图

目前数栈实时湖仓已经完成了 Spark 和 Trino 的部分,之后也会将这四部分内容都完成落地,充分发挥物化视图的作用。

● 物化视图实现原理

file · 创建物化视图语法

CREATE MATERIALIZED VIEW (IF NOT EXISTS)? multipartIdentifier
          ('(' colTypeList ')')? tableProvider?
          ((OPTIONS options=tablePropertyList) |
           (PARTITIONED BY partitioning=partitionFieldList) |
           skewSpec |
           bucketSpec |
           rowFormat |
           createFileFormat |
           locationSpec |
           commentSpec |
           (TBLPROPERTIES tableProps=tablePropertyList))*
          AS query  

· 示例

CREATE MATERIALIZED VIEW mv
AS SELECT
  a.id, 
  a.name 
FROM jinyu_base a 
JOIN jinyu_base_partition b 
ON a.id = b.id;

未来规划

袋鼠云基于实时湖仓的实践之路远不止于此,未来还将进行更多、更深层次的探索,为企业提供更高效、更灵活、更智能的数据处理解决方案。

· 易用性:增加平台湖表管理的易用性

· 引入 Paimon:平台支持对接 Paimon、增加基于 Paimon 的湖仓一体建设

· 提升入湖性能:深入并增强内核,提升入湖的的性能

· 安全性探索:实时湖仓提供数据共享、支持多引擎,探索实时湖仓的安全管理方案

本文根据《实时湖仓实践五讲第三期》直播内容总结而来,感兴趣的朋友们可点击链接观看直播回放视频及免费获取直播课件。

直播课件:

https://www.dtstack.com/resources/1054?src=szsm

直播视频:

https://www.bilibili.com/video/BV1Ee411d7Py/?spm_id_from=333.999.0.0&

《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szcsdn

同时,欢迎对大数据开源项目有兴趣的同学加入我们,一起交流最新开源技术信息,号码:30537511,项目地址:https://github.com/DTStack

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

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

相关文章

html实现竖直步骤条

1、问题描述 最近碰到一个需求,要把审批流程改为竖直步骤条的形式。本来想直接抄网上的,但是网上给的要么是水平步骤条,要么是集成在框架里的,要么就是人家写的太复杂了,js,css一大堆。 2、我的代码 代码下…

【沁恒 CH32V208 开发板免费试用】+ U盘/ SD NAND读写与多功能数码相框

CH32V208继承了沁恆产品一贯的传统,即U盘的读写功能。这使得尽管CH32V208的闪存要比CH32V307的小一倍,但有了U盘读写功能的支持就可有效地缓解用户对存储空间的需求。它除了支持U盘的读取,还支持对CS SD NAND (贴片式TF卡/SD卡) 这类器件的使…

小黑子—springMVC:第一章 请求处理与响应数据

springMVC入门1.0 1、小黑子的springMVC基础1.1 SpringMVC概述1.2 SpringMVC快速入门1.3 Controller中直接注入spring中维护的Bean1.4 SpringMVC关键组件浅析 2、SpringMVC的请求处理2.1 请求映射路径配置2.2 请求数据的接收2.2.1 键值对方式接收数据2.2.1 - I RquestParam属性…

Linux Hadoop平台伪分布式安装(Hive on Spark)

📔Linux Hadoop 伪分布式安装(Hive on Spark) 安装目录 1. JDK2. Hadoop3. MysqlHive3.1 Mysql8安装3.2 Hive安装 4. Spark4.1 Maven安装4.2 Scala安装4.3 Spark编译并安装 5. Zookeeper6. HBase 版本概要: jdk: jdk-8u391-linux-x64.tar.gz…

浅析SR隧道路径批量构造方法

为什么要仿真PCE LSP下发隧道路径? 在大型的多区域网络中,路径计算非常复杂。在某些场景下,为了完成路径计算,需要在控制器上部署特殊的计算组件,并需要不同区域中的节点之间协作。这使得网元在进行路径计算时效率低&…

局部路由守卫path守卫

局部路由守卫path守卫 path守卫(beforeEnter) 代码位置:path守卫代码写在route对象中(index.js文件)beforeEnter是一个函数,参数上没有回调函数beforeEnter有三个参数: to参数:to是…

CocosCreator | 2.3.3及后续版本浏览器无法断点和控制台不显示错误代码路径的解决方案(cocos代码报错无法定位的问题)

在2.3.3正式版的官方介绍中有这么一项: 提升网页预览时的加载速度 为了进一步提升开发效率,我们优化了网页预览时的脚本加载速度。不论是对引擎还是项目中的代码,载入速度都获得了提升。特别是在开启自定义引擎,或者使用手机扫码…

实时时钟和日历电路MS85163/MS85163M

主要特点 ◼ 基于 32.768kHz 晶振提供年、月、日、 周工作日、小时、分钟和秒 ◼ 具有世纪标记,可工作于 2000-2199 年 ◼ 工作电压: 1.8V-5.5V ◼ 低功耗 ◼ 最高频率达 400kHz 的 I 2 C 接口 ◼ 可编程的时钟输出 (32.768kHz, 1.024kHz…

开发人员请注意:在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件

1、开发人员请注意:在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件 一组新的恶意 Python 包已经滑入 Python 包索引 (PyPI) 存储库,其最终目的是从受感染的开发人员系统中窃取敏感信息。这些软件包伪装成看似无害的混淆工具…

记录一次数据库内存占满

一,背景及表现 用户普遍反馈业务功能,无法加载出数据,服务挂了 二,数据库指标 三,排查方反馈 排查方反馈:查全量数据导致的,就是没查出来但是一直在查 四,分析 1.应用服务器问题…

深度系统v15.4正式发布,惊艳眼球

导读深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。深度桌面操作系统V15.4专业版使用全新设计的控制中心和重构桌面,采用模糊透明整体风格,全新的热区交互及窗口管理器动效,精挑细选的桌面壁纸;采用全…

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例 针对本地机为Windows 云服务器租显卡跑些小模型很方便,但是当你想做可视化的时候,可能会遇到麻烦,云服务器没有显示输出界面,无法可视化一些检测任务的结果,或者可…

Python爬虫爬取家纺数据并分析

因为时间的原因,没法写一个详细的教程,但是我可以提供一个基本的框架。你需要根据实际情况进行修改和扩展。以下是使用Python的requests库和BeautifulSoup库来爬取网页内容的基本步骤: # 导入所需的库 import requests from bs4 import Beaut…

从零开始搭建SpringCloud微服务集群:Nacos的安装和配置

目录 Nacos集群搭建 1.集群结构图 2.搭建集群 2.1.初始化数据库 2.2.下载nacos 2.3.配置Nacos 2.4.启动 2.5.nginx反向代理 2.6.优化 Nacos集群搭建 1.集群结构图 官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理3个Nac…

winui3开发笔记(二)自定义标题栏

参考文章链接:https://www.programminghunter.com/article/46392310600/ 注意事项 获取 AppWindowTitleBar 的实例并设置其颜色属性时,InitializeTitleBar(AppWindow.TitleBar);,只适用于Windows App SDK 1.2及以上,所以如果用w…

基于springboot学生心理咨询评估系统的设计与实现 全套代码 全套文档 附带视频知道教程

springboot学生心理咨询评估系统,springboot vue mysql (毕业论文10784字以上,共30页,程序代码,MySQL数据库) 代码下载: 链接:https://pan.baidu.com/s/1MjiwuWdkVHFQ4toPP1vVrA?pwd4eck 提取码:4eck 【运行环境】 IDEA, JDK1.8, Mysql, Node, Vue …

Unity 跑酷游戏全部脚本(完结)

脚本1 触发器脚本 这个脚本是主角身上的脚本,用于检测是否碰到其他触发器,并做出对应的行为 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColliidisonTrigger : MonoBehaviour { //触发检测 …

08.Diffusion Model数学原理分析(下)

文章目录 denoising matching term σ t z \sigma_tz σt​z的猜想Diffusion Model for SpeechDiffusion Model for TextMask-Predict 部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜索。 书接上文。 denoising matching term E q ( x t ∣ x 0 …

适用于 iOS 的 10 个最佳数据恢复工具分享

在当今的数字时代,我们的移动设备占据了我们生活的很大一部分。从令人难忘的照片和视频到重要的文档和消息,我们的 iOS 设备存储了大量我们无法承受丢失的数据。然而,事故时有发生,无论是由于软件故障、无意删除,甚至是…

Java 算法篇-深入理解递归(递归实现:青蛙爬楼梯)

🔥博客主页: 小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 递归的说明 2.0 用递归来实现相关问题 2.1 递归 - 阶乘 2.2 递归 - 反向打印字符串 2.3 递归 - 二分查找 2.4 递归 - 冒泡排序 2.5 递归 - 冒泡排序2.0 2.6 递归 - 插…