解析云上实时数仓的挑战与实践 | Databend @DTCC 2024 演讲回顾

本文主要是介绍解析云上实时数仓的挑战与实践 | Databend @DTCC 2024 演讲回顾,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

8 月 22 日 ~ 24 日,由 IT168 联合旗下 ITPUB、ChinaUnix 两大技术社区主办的第 15 届中国数据库技术大会(DTCC2024)在北京朗丽兹西山花园酒店成功召开。本次大会以“自研创新 数智未来”为主题,通过深度交流与探讨,推动数据库技术的自主创新和数智化转型。

作为一家技术领先的数据仓库服务商,Databend 也在本次大会亮相。Databend 联合创始人吴炳锡在“湖仓一体化技术”技术专场中受邀出席担任主持人,并为观众带来主题为《解析云上实时数仓的挑战与应对》的主题分享

图片

近年来,IT 技术迅猛发展,尤其是大数据领域更是日新月异。从曾经年薪百万的大数据架构师到如今被戏称为“数据搬砖”的大数据工程师,行业角色的转变令人深思。尤其是在云计算时代,大数据工程师的工作内容似乎更加琐碎,甚至让人感到难以把握。在本次交流中,吴炳锡老师深入剖析了大数据架构及实时数仓的演进与挑战,探讨如何在云环境中实现高效且低成本的数据治理与应用。以下为演讲实录:

图片

大数据技术栈经过多年演进,整个产品架构现在已经变得非常复杂,各种新技术让人眼花缭乱。从最早的 Oracle、Teradata 到 Hadoop、Kafka,再到 Spark、Flink 流批一体架构,以及现在的 ClickHouse、Hudi、Iceberg、Paimon、Trino、Implala 和各种大模型。一个企业想建设大数据平台,没几个月到半年时间可能都搞不定。

图片

那么能不能找到一个更简单的,面向云的架构?

在私有化方案中,理想架构是分布式存算一体。但到了云上,由于所有流量和流程都是要付费的,这个架构就不是很值得了。在云上,我们将元数据变成一个统一的服务,然后用 K8s 来支撑计算,实现无状态可弹性扩展,不需要还可以弹性收缩;存储用对象存储。最终实现 Pay as you Go,IT 基础架构就如同用电一样,按需付费,用多少付多少钱。

图片

技术的发展路径殊途同归,就像 SpaceX 的发动机近些年的变化一样,都是朝着简单自动化、低成本高性能、可规模化方向发展,大数据技术也经历着大道至简的发展过程。Hadoop 时代做一个大数据架构,需要各种东西,二三十个组件可能都搞不定,一出现问题动不动就要把所有东西重启一遍,架构非常复杂。之后,大家就开始简化架构,过渡到开源湖仓架构。用 Iceberg 统一开放表格式, 加上Spark、Trino 来实现。再往后面就更简单了,大数据进入湖仓一体化架构,对外是统一的 SQL 入口,直接用 SQL 的方式查询。在这个过程中,大数据架构的成本变得更低,更简单易用,同时有了更高性能的存储和高性能的计算能力。由于解决了产品结构的复杂性,用户的数据无需再多次搬家,都统一存放在对象存储里面。此外,以前的大数据里面经常会有数据丢失、数据不一致的问题,Databend 由于是从数据库切到大数据的,第一个理念就是要搞定事务,所有数据的写入必须保证完整一致性。

实时数仓架构在云上面临的挑战

进入云时代,我们发现大数据架构如果只是简单地把 Spark、Flink 搬上云,只解决了海量数据写入的问题,之后你会发现还是有很多东西满足不了,至少还需要一个 MPP 的 OLAP 数仓。但这又要涉及到数据迁移,来回的数据迁移会造成大量的数据不一致,这对于数据治理是一个非常大的挑战。数据技术栈的增多也会造成运维成本特别高。在这种架构下,数据的实时性处理非常差,数据处理的流程也比较长,数据从接入、清洗到最终提供服务,流程快的话 5 分钟就非常不错了,想缩小到分钟或者秒级,基本上不太可能。此外,技术栈一多数据加工资源占用就多,存在严重的性能问题。我们以前看到过一个项目,从 Kafka 到 ETL,再到 ClickHouse,总共200多台机器,其中 ClickHouse 大概 60 台+,Kafka + ETL的机器占用 140 台左右,整个过程非常长,占用资源很大。如此多的技术栈也很容易形成数据孤岛,使得数据散落在各处。经常有数据从数仓建设起就在里面,但从来没被用过。

另外在扩展性方面也面临比较大的问题,大量的本地盘成本可预见的顶不住。现在业界里面有个趋势是把本地盘慢慢替换成云上的对象存储,用对象存储去做数据处理。

图片

在海外有一个比较好的解决方案, Snowflake。在这个产品中,不管你的 SQL 是离线的还是实时的,基本上都可以非常方便地搞定,而且很快。它帮助用户解决了实时数仓架构在云上面临的一些挑战:

01 多账号,多 VPC 下构建一个统一的大数据分析环境

现在很多公司按部门拆分云上的账号,甚至按小组拆分,需要每个 VPC 中一套传统的方案,成本比较高,容易形成数据孤岛及增加运维复杂度。在 Snowflake 里,可以让你跨 VPC 建一个数据中心。比如说你的数据中心有中国香港区、新加坡区、美国东1区、欧洲区等,Snowflake 可以建一个统一的数据中心。同时,它还利用了对象存储本身写入不要钱,内网读取没有流量费等特点,省下来很多流量的费用。

02 云上资源闲置率高,收费项多

目前,很多企业云上的资源闲置非常高,有超过 15% 企业云上使用率都只在 10%,大家买了大量的资源,用的却非常的少,造成了大量的资源浪费。但云上其实有很多项目是收费的,比方流量费,本地盘费用等等。

03 构建副本成本高

传统大数据很难做到多区数据可用,需要大量的数据副本提升数据的可用性。如果你有大量的数据需要存储,数据副本可能会更贵。但用对象存储就会大大缓解这个痛点,AWS 的 S3,阿里云的 OSS、腾讯云的 COS 等对象存储本身就有副本,可以省出来大量构建副本的费用。

Databend 就是针对这种云上架构的特点,研发出一个真正存储一体化的大数据解决方案。它可以满足用户关于云上数仓的绝大部分需求:

图片

  • 统一 SQL 接口,SQL 为王。用户无需再单独学习一套新的语言,不论多复杂的任务,只用 SQL 就可以运行起来;

  • 支持海量数据任意字段查询及任意条件查询;

  • 集群扩缩容方便,计算秒级扩缩容;

  • 支持半结构化对象,复杂 json 处理;

  • 支持外置 UDF,复杂业务逻辑 SQL 化;

  • 基于存算分离架构,数据可以放到 S3;

  • 支持即席查询,同时支持一定量的并发,实时查询;

  • 完善的租户和权限,支持物理级别隔离;

  • 内置流的能力处理,任务调度能力;

  • 复杂任务友好出错处理机制。

如何在云上构建简单易用的大数据平台

图片

Databend 是面向云设计的数仓平台,架构上分为三部分:

第一层是元数据服务。只需要少量本次盘存储,可能 100G 都不到。但单实例可以支持几万级的库表,每秒万级的并发能力;

第二层是 Databend-Query 层这是一个无状态的计算和存储引擎管理层;最下层是存储层,使用对象存储持久化存储数据。

此外,Databend 是基于 Rust 从 0 到 1 开发出来的,这也让 Databend 占了一个特别大的优势:只要你能安装 Rust 编译器,就可以编译通过,就可以在这个环境里运行。所以我们基本实现了所有国产化平台都能运行,所有的 Arm 平台都能运行。而且 Arm 平台可以运行得更好,跑得更稳。

图片

上图是 Databend 的数据写入流程。很多企业在处理数据写入时,会大量使用到 Kafka,通过 Kafka 接收数据后把数据写入到 S3 的一个临时接入桶中。我们的很多用户没有用 Kafka,而是使用 OpenDAL 或者官方的 SDK,直接将数据往对象存储里写,写的过程中 ndjson、paruqet、CSV、ORC 等格式都可以。

数据写完后,Databend 的存算引擎会定期的,甚至秒级地利用批量加功能,把 S3 中的文件加载到 Databend 中。这里有一个比较有意思的功能,所有的 S3 都支持 notify 地址,当你的数据写到 S3 里面,它会往外发通知,你只用订阅这个通知来触发这个任务,就可以实现数据的秒级写入。比如数据每秒钟产生了 1 万个文件,Databend 基本上一秒钟也能加载进来,实现秒级的数据加载。然后数据直接对外提供服务就可以了。

如果你有非常复杂的数据清洗需求,Databend 有数据治理集群可以来处理。你可以把每个任务拆分到不同集群里,有序地进行处理。另外,Databend 内部有 stream,每张表如果有增量的话,可以借助 stream 做相应的计算。这样的话还可以把 Spark 、Flink 也能省下来。

此外,Databend 也可以按不同的业务拆分成多个业务集群,实现同一份数据对外提供服务。

图片

谈到 Databend 的时候经常说到易用性,但易用性怎么证明呢?

第一,Databend 采用全部标准化 SQL 操作。所有 Snowflake 的函数在 Databend 中也都以 SQL 实现了;

第二,不用考虑分区。我们不要求用户做什么分区,Databend 内部已经帮用户做好分区了。我们按照压缩前 100- 150MB 的数据,压缩到对象存储;

第三,不用考虑索引;

第四,不用考虑数据长度,只用考虑数据类型;

第五,扩容也不用考虑 Reshuffle,扩容计算节点与存储是分开的;

第六,无感升级,关掉再起来就是个新的;

第七,可视化的执行计划;

第八,同一份数据多个服务集群同时使用,绝对算例隔离;

九,结构化和半结构化整合;

十,支持 Python UDF 和 AI 整合。

图片

这是 Databend 在云上与 Snowflake 做的一个性能对比测试,在一个 8 核 64G 的节点跑,在 TPCH-100 测试中,数据 100G 压缩完后,在 Databend 只占 24G 的存储空间。整个测试下来,Databend 云平台里面收费只有 0.65 美元。此外,在某客户真实环境里,55 亿大表场景下,统计每年数据行数场景,5 秒完成统计,全表扫描;全表最小最大值统计场景,4 秒完成统计,全表扫描;统计 2022 年数据行数场景,1秒完成统计,部分扫描;统计一年每个月的数据汇总,2-3 秒完成。

图片

Databend 最早的场景是做数据库归档,包括大数据归档。比如 MySQL、TiDB、 OB ,用户觉得贵,数据又特别大,就可以归档到 Databend 中,用对象存储+ K8s 一个非常小的实例就可以,基本成本能下降 95% 以上。

此外,Databend 做的比较多的另一个场景是日志和历史订单场景。一天 100T 左右的审计日志,在 Databend 压缩完后大概可以到 20G 以内,查询可以做到秒级。

云原生架构数仓和 AI 的整合

现在很多企业都在做知识库 RAG,Databend 其实很早也实现了 RAG 方案,将大模型通过调度注册函数的方式注册到 Databend 里面,然后做 embedding, embedding 之后在内部做一些向量化搜索,然后再做大模型的调度。通过这种方式,我们实现了一个非常方便的 RAG 方案。

下一步我们希望想引入 AI 去做 SQL 改错,假如你的 SQL 输入完有些字段错了,能第一时间帮你纠正过来。如果你的 SQL 写得不够高效,它也能帮你更高效地完成这种重复繁琐工作。

此外,Databend 内置了 Python、Java 的 UDF,你可以使用 Python 和 Script 做一些 UDF,进行一些特殊的数据处理。比如数字中加入了全角,身份证号的 15 位转 18 位等特殊需求,就可以借助 json 或者 Python 的方式用 y 值函数来帮你处理。

图片

我们还提供了一个数据集市,它有两套方案,一种是简易的数据集市,可以把同类的表,从 DB ID 到 table ID ,最终注册到别的库里面,注册别的租户去使用。另一种是可以共享视图和一些表的共享服务。

这个功能对企业有什么好处?我们在很多传统行业里面发现,如果企业做好数据资产登记,在需要哪个资产时就可以非常方便地去请求这个数据,请求完之后对方如果同意了,就可以把这张表直接注册到你的库里。你可以以这种植入的方式来访问,甚至以视图的方式来访问它。很多需要把数据搬来搬去的场景,用到这个数据集市后就可以把这些数据搬迁工作全省掉了。而且数据只有一份,数据一致性更高。

以上就是本次分享的全部内容,如果你对 Databend 感兴趣的话,欢迎来体验、试用,点击文末「阅读原文」,立即试用  Databend Cloud!

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

👨‍💻‍ Databend Cloud:https://databend.cn

📖 Databend 文档:https://docs.databend.cn/

💻 Wechat:Databend

✨ GitHub:https://github.com/datafuselabs/databend

这篇关于解析云上实时数仓的挑战与实践 | Databend @DTCC 2024 演讲回顾的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119249

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工