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 是离线的还是实时的,基本上都可以非常方便地搞定,而且很快。它帮助用户解决了实时数仓架构在云上面临的一些挑战:
1、多账号,多 VPC 下构建一个统一的 大数据分析 环境
现在很多公司按部门拆分云上的账号,甚至按小组拆分,需要每个 VPC 中一套传统的方案,成本比较高,容易形成数据孤岛及增加运维复杂度。在 Snowflake 里,可以让你跨 VPC 建一个数据中心。比如说你的数据中心有中国香港区、新加坡区、美国东1区、欧洲区等,Snowflake 可以建一个统一的数据中心。同时,它还利用了对象存储本身写入不要钱,内网读取没有流量费等特点,省下来很多流量的费用。 2、云上资源闲置率高,收费项多 目前,很多企业云上的资源闲置非常高,有超过 15% 企业云上使用率都只在 10%,大家买了大量的资源,用的却非常的少,造成了大量的资源浪费。但云上其实有很多项目是收费的,比方流量费,本地盘费用等等。
3、构建副本成本高
传统大数据很难做到多区数据可用,需要大量的数据副本提升数据的可用性。如果你有大量的数据需要存储,数据副本可能会更贵。但用对象存储就会大大缓解这个痛点,AWS 的 S3,阿里云的 OSS、腾讯云的 COS 等对象存储本身就有副本,可以省出来大量构建副本的费用。
Databend 就是针对这种云上架构的特点,研发出一个真正存储一体化的大数据解决方案。它可以满足用户关于云上数仓的绝大部分需求:
1、统一 SQL 接口,SQL 为王。用户无需再单独学习一套新的语言,不论多复杂的任务,只用 SQL 就可以运行起来;
2、支持海量数据任意字段查询及任意条件查询;
3、集群扩缩容方便,计算秒级扩缩容;
4、支持半结构化对象,复杂 json 处理;
5、支持外置 UDF,复杂业务逻辑 SQL 化;
6、基于存算分离架构,数据可以放到 S3;
7、支持即席查询,同时支持一定量的并发,实时查询;
8、完善的租户和权限,支持物理级别隔离;
9、内置流的能力处理,任务调度能力;
10、复杂任务友好出错处理机制。
如何在云上构建简单易用的大数据平台
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 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
👨💻 Databend Cloud:https://databend.cn
📖 Databend 文档:https://docs.databend.cn/
💻 Wechat:Databend
✨ GitHub:https://github.com/datafuselabs/databend