OPPO 数仓与数据湖融合架构升级的实践与思考

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 过去几年,数据仓库和数据湖方案在快速演进和弥补自身缺陷的同时,二者之间的边界也逐渐淡化。云原生的新一代数据架构不再遵循数据湖或数据仓库的单一经典架构,而是在一定程度上结合二者的优势重新构建。在云厂商和开源技术方案的共同推动之下,2021 年我们将会看到更多“湖仓一体”的实际落地案例。InfoQ 希望通过选题的方式对数据湖和数仓融合架构在不同企业的落地情况、实践过程、改进优化方案等内容进行呈现。本文,InfoQ 采访了 OPPO 云数架构部部长鲍永成,请他与我们分享 OPPO 引入数据湖和数仓融合架构的探索工作和实践中的一些思考。

当我们谈数据湖,谈的是什么?

InfoQ:数据湖和数仓融合架构是当下大数据领域非常重要的议题之一,不仅各大云厂商先后提出了自己的技术方案,开源社区也有一些项目(包括 DeltaLake、Iceberg 和 Hudi)非常活跃。其实数据湖这个概念诞生至今有挺长时间了,在您看来,目前业内对数据湖的定义和重要性是否已经达成一致?云厂商的产品和开源项目之间有什么差异吗?

鲍永成:回答这个问题之前,我们得明确仓与湖的主要区别。仓里的数据,有明确的表、字段定义,表与表之间的关系清晰。湖里的数据,样式就多了,有结构化、半结构化(JSON、XML 等)、非结构化(图片、视频、音乐)。 数据入仓,我们要预先定义好 schema。 数据入湖,则没有这样的要求,只需要将原始数据写入指定存储即可(通常是对象存储),当真正需要使用的时候,我们再设法定义 schema,进行分析应用。显然,数据入湖比入仓要方便快捷。

回到我们的话题,云厂商的数据湖产品,通常积极推广他们的低成本云存储(S3、OSS 等),吸引用户将数据上云。一旦数据上云,进而吸引用户使用他们多年完善的大数据体系产品(计算引擎、依赖调度、质量管理、血缘管理、数据治理等),为用户提供数据开发、分析、应用的附加服务。其次,很多企业出于数据安全的考虑,并不愿意将自己的数据上云,一套兼容各类存储的仓湖融合方案,是云厂商对市场的迎合。

开源的几个数据产品 Delta Lake、Apache Iceberg、Apache Hudi 更多可以理解为一种 TableFormat,这种 TableFormat 可以灵活定制 Schema,对对象存储友好,同时可以实时处理数据,支持 Update、Insert、Upsert 特性。企业应用好他们,可以助力自身构建批流一体、仓湖融合的大数据架构。

仓湖融合架构升级的三个阶段

InfoQ:OPPO 是什么时候决定要引入数据湖和数仓融合架构的?能否介绍下当时的整个背景情况?是希望解决什么样的问题或痛点?

鲍永成:OPPO 在 2020 年初引入数据湖的架构方案,这是建立在 OPPO 进军 IoT 领域的大背景下。随着公司不断推出 IoT 产品,IoT 设备产生的数据源源不断,设备的智能化服务需要我们对这些数据做更深层次的挖掘。海量的数据如何高效存储、高效利用是大数据部门必须要解决的问题。数据湖方案可以帮助我们快速收集保存数据,有效支持我们做数据分析、市场预测,以及智能服务的算法训练。

InfoQ:为什么选择引入 Apache Iceberg?你们前期做了哪些技术选型和评估工作?

鲍永成:引入 Iceberg 构建我们的数据湖方案,主要出于两点考虑。

  • 一.云数融合:OPPO 已经基于 K8S,构建了自己的云平台,主要数据存在对象存储 OCS 上。大数据依靠 Yarn 调度,HDFS 做存储,目前云与大数据正在逐步完成融合,做到调度融合,存储融合,统一运维,进而降低成本。
  • 二.是在与 Delta Lake、Hudi,Iceberg 对比中,虽然 Hudi 的实时特性最完备,但与 Spark 耦合太紧,Schema 的定义缺乏灵活性。Iceberg 对 Upsert、Insert、Delete 的支持没有 Hudi 完备,但社区在积极跟进。摆脱了具体计算引擎的束缚,Iceberg 专注于数据湖 TableFormat 标准的制定,这个标准正在慢慢被各家计算引擎所接受,未来会赢得更多的用户认可。

InfoQ:能否详细介绍一下 OPPO 整体的数据平台架构或数据处理流水线?在引入 Iceberg 前后,有哪些变化和演进?

鲍永成:下图是 OPPO 的大数据架构,我们目前主要在推进两项工作。

27cfc4c6e7efbbdfd175feef2d8a6748.png

1. 云数融合:OPPO 已经基于 K8s 构建了自己的云平台,主要数据存在对象存储 OCS 上。大数据平台依靠 Yarn 调度,HDFS 做存储,后续二者将统一调度与存储,统一运维,降低成本。云数融合的一期重点,会通过我们自研的 ADLS 支持数据湖存储。ADLS 的冷热分层,全局缓存特性在数据湖落地的过程中,可以有效降低存储成本,减轻存算分离后的性能影响.

5e69b1f51cf390cc4f0e2b61af534c8c.png

2. 流批一体、仓湖融合的架构升级

9fdbd0cd556eb5cef1a06f01af0c27d1.png

对于传统的 Lambda 架构,流与批是单独的两条数据处理链路,维护成本高,且容易出现数据不一致的情况。新的 Kappa 架构使用 Kafka 作为存储,简化了架构,但 Kafka 数据承载能力有限,且数据格式并不利于计算引擎分析。

我们在以下两个方面,对传统架构进行了改造。

1)针对公司原来的数据埋点链路,我们引入了 Iceberg,将实时数仓库的 Kafka 替换成 IcebergFormat,通过 Spark/Presto 引擎做数据查询,增加数据仓库的实时性。

6dc52e8c7913c83320e2ef39d6a1e3cb.png

2)公司原有的数据库入仓链路通过 Flinkx 完成数据同步, 无法支持 CDC。目前 Flink 已经原生支持 CDC 数据解析,binlog 通过 flink-cdc-connector 拉取可以自动转化成 INSERT、DELETE、UPDATE_BEFORE、UPDATE_AFTER 消息,结合 Iceberg 支持的 Update、Delete 特性,可以高效准确地将数据库同步到数仓,方便计算引擎进行分析。

27729b1e9af0b79c0cb111ebaf3d771a.png

OPPO 的一些数据,存储在 Oracle,SqlServer 等数据库中,Flink 对这些数据库的数据的拉取并没有提供支持。我们封装了 Obus-DB 的组件,来适配各类数据库,将数据同步到 Kafka 中,支持后续数据入湖的消费。

InfoQ:你们是如何将基于 Apache Iceberg 的数据湖方案,与 OPPO 已有的数据仓库融合的(分哪些阶段、关键工作等)?改造过程中存在哪些难点和挑战?你们是如何解决的?

鲍永成:仓湖融合可以分为 3 个阶段,目标是做到 3 个统一:统一数据、统一元数据、统一计算引擎。

1)统一数据

大数据 Lambda 架构分实时离线两条链路,两条链路可能造成数据不一致。Kappa 架构虽然统一了链路,但 kafka 的特征注定了这套架构对历史分析并不友好。引入 Iceberg 换掉 kafka,可以认为是 Kappa 架构的升级,简称 Kappa+,可以做到在一条链路上完成数据入仓,支撑流批数据分析。Iceberg Commit Snapshot 架构实时性不及 Kafka。目前我们采用 Iceberg 备份 Kafka 数据,同时缩短 Kafka 数据的存储时间,以满足用户的实时性需求,并为后续的 Iceberg 优化预留空间。

2)统一元数据

目前大数据的元数据基本都存储在 HiveMetaStore 中,Iceberg 构建表,需要融合其中。Flink 1.9 版本以前,是自己管理元数据,基于此,OPPO 的元数据也分离线和实时两套;Flink 1.11 版本后,对 HiveMetaStore 的集成已经比较成熟,我们正在将实时链路的元数据逐部迁移到 HiveMetaStore。

3)统一引擎

Iceberg 目前可以支撑 Flink、Spark、Presto 的查询,这虽然给了用户更多的选择,但同时也给用户带来了选择困难。在引擎层,可以做到一套引擎出口,根据数据特征通过 HBO 灵活选择执行引擎。这项工作目前正在规划中。

目前数据埋点入仓与数据库 CDC 入仓两条链路已经完成了数据湖架构改造,但 OPPO 每天入仓的数据量巨大,Iceberg 性能还需要优化。

没有完备的数据体系,空谈湖仓之争没意义

InfoQ:您认为现阶段 Iceberg 还存在哪些不足待改进?你们有没有什么踩坑经验可以分享?

鲍永成:Iceberg 目前虽然有基于文件的统计信息,方便做谓词下推的数据过滤,但还缺少细致的索引规范来加速文件检索。同时 Row-level delete 的性能也不够高效,还有优化空间。

InfoQ:接下来对于数据湖引擎和调度平台的建设,以及湖仓融合架构改造,你们还有哪些规划?

鲍永成:谈论数据湖和数据仓库,立足点应该建立提供更好的数据服务上。完备的数据体系,包括数据存储、多模态计算引擎、依赖调度、质量管理、血缘管理、任务诊断、数据集成、统一元数据、数据安全、数据服务等多方面内容,只有这些方面的能力完备,才能提供优质的数据服务,这是 OPPO 数据中心的核心工作。无论是数据湖,还是数据仓库的数据,只有运转在这套体系下,才能得到高效利用。在上述能力具备的条件下,解决好湖数据快速构建 schema、湖与仓的元数据统一问题,仓湖自然融合。上述能力不完备,空谈湖与仓之争,没有太多意义,孤岛问题不可避免,数据利用率低,使用成本高。

InfoQ:您怎么看数据湖和数仓融合架构未来的发展趋势?企业或业务团队该从哪些方面去评估自己是否需要引入湖仓融合架构?

鲍永成:仓湖融合的架构是个必然趋势。数据时代,人们产生和接触的数据越来越多样,数据服务的要求也越来越高。快速而又低成本的利用数据,数据湖有着较为明显的优势。如果企业与团队面临这样的挑战,可以引入仓湖融合的架构。但要做到仓湖融合,可以结合自身的情况,参考上一个问题的回答。

采访嘉宾介绍

鲍永成,OPPO 云数架构 &个人云负责人。曾服务于土豆网、思科、京东、头条等公司。长期负责云计算平台、大数据平台的研发与技术演进。带领团队先后在京东商城、OPPO 实施完成了全量业务上云战略。目前致力于打造 OPPO 开放的云与大数据能力,在跨场景、多终端的超大空间为用户提供智慧服务。

相关文章:

从自研到 Delta 到 Iceberg,网易严选数据湖建设实践
Flink 集成 Iceberg 在同程艺龙的实践

相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
5天前
|
存储 监控 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第9天】 在本文中,我们将深入探讨如何在后端开发中构建一个高效的微服务架构。通过分析不同的设计模式和最佳实践,我们将展示如何提升系统的可扩展性、弹性和维护性。我们还将讨论微服务架构在处理复杂业务逻辑和高并发场景下的优势。最后,我们将分享一些实用的工具和技术,以帮助开发者实现这一目标。
|
14天前
|
监控 Java 测试技术
现代化软件开发中的微服务架构设计与实践
随着软件开发的发展,传统的单体应用架构已经无法满足现代化应用的需求。微服务架构作为一种新的设计理念,为软件开发提供了更灵活、可扩展的解决方案。本文将介绍微服务架构的设计原则、实践方法以及相关技术工具,并结合实例展示其在现代化软件开发中的应用。
|
3天前
|
监控 数据库 开发者
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第11天】在当今软件开发的世界中,微服务架构已经成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了设计、部署和维护微服务系统时面临的挑战,并提出了一系列实用的策略和最佳实践。我们将从服务的划分原则出发,讨论如何确保每个微服务的自治性,以及如何通过容器化和编排技术实现服务的高效运行。文章还将涉及监控、日志记录和故障恢复的策略,旨在帮助开发人员构建一个既高效又可靠的微服务环境。
|
4天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。
|
6天前
|
监控 API 持续交付
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第8天】在当今快速演进的软件开发领域,微服务架构已经成为实现敏捷开发、持续交付和系统弹性的关键模式。本文将探讨构建一个高效且可靠的微服务系统所必须的策略和最佳实践。我们将从服务的划分与设计原则出发,讨论如何通过容器化、服务发现、API网关以及断路器模式来优化系统的可伸缩性和鲁棒性。此外,我们还将涉及监控、日志管理以及CI/CD流程在确保微服务架构稳定运行中的作用。
|
6天前
|
敏捷开发 持续交付 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第8天】 在数字化转型的浪潮中,微服务架构已成为企业追求敏捷开发、持续交付和系统弹性的关键解决方案。本文将深入探讨微服务的核心概念,包括其设计原则、优缺点以及如何在后端开发中实现高效的微服务架构。我们将通过实际案例分析,展示微服务如何帮助企业快速适应市场变化,同时保持系统的可维护性和扩展性。
|
6天前
|
监控 云计算 开发者
探索云计算中的无服务器架构:从概念到实践
无服务器架构作为云计算领域的新兴技术,正在以其高效、灵活的特性吸引着越来越多的开发者和企业。本文将深入探讨无服务器架构的概念及其在云计算中的应用,通过实际案例展示如何利用无服务器架构构建可靠、可扩展的应用系统。
|
8天前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
8天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
29 1
|
8天前
|
API 持续交付 开发者
构建高效微服务架构:策略与实践
【5月更文挑战第6天】随着现代软件系统的复杂性增加,微服务架构逐渐成为企业开发的首选模式。本文深入分析了构建高效微服务架构的关键策略,并提供了一套实践指南,帮助开发者在保证系统可伸缩性、灵活性和稳定性的前提下,优化后端服务的性能和可维护性。通过具体案例分析,本文将展示如何利用容器化、服务网格、API网关等技术手段,实现微服务的高可用和敏捷部署。