Robinhood 团队成员高级工程师 Balaji Varadarajan 和技术主管 Pritam Dey 描述了他们公司的数据Lakehouse的实现,Robinhood 的数据团队如何基于 Apache Hudi 和相关 OSS 服务来处理数 PB 规模的指数级增长。
关键要点包括分层架构实施的细节;如何应用相同的架构来跟踪元数据并满足相关的 SLA(例如数据新鲜度);以及如何大规模有效地实施 GDPR 合规性和其他数据治理流程。
Robinhood 数据 Lakehouse 生态系统支持超过一万个数据源,处理数 PB 数据集,并处理数据新鲜度模式(从近实时流到静态)、数据关键性、流量模式和其他因素方面差异很大的用例。
Robinhood 数据 Lakehouse 从许多不同的来源获取数据:实时应用程序事件和实验流、通过 API 按不同计划提供的第三方数据以及 Postgres 等在线 RDBMS。然后必须将这些数据提供给许多消费者类型和用例,包括高关键性用例(例如欺诈检测和风险评估)以及低关键性用例(例如分析、报告和监控)。
Robinhood 对所有各种用例的支持是建立在多层架构之上的,关键性最高的数据在第 0 层进行处理,后续层用于处理具有较低约束的数据,该 Lakehouse架构满足 Robinhood 的需求
每层中的数据处理都从数据源开始——在本例中 Debezium 正在监视关系数据库服务 (RDS),例如 Postgres。在启动之前会完成一次性引导过程,确保在数据Lakehouse中定义初始目标表和架构 - 预期 Debezium 驱动的变更数据捕获 (CDC) 流。一旦表就位就会启动一个多步骤过程,并在该层的生命周期内保持活动状态:
以下架构维护了关键的元数据属性(新鲜度)。
用于跟踪数据新鲜度的内部生成的元数据(来自 Debezium 和 Apache Hudi 源)通过上述过程中步骤 2 和 3 中提到的基础设施(即 Debezium + Kafka + DeltaStreamer)进行循环,然后进入到步骤 4。也就是说 Hive 元数据存储会根据 Debezium 状态和 DeltaStreamer 生成的其他新鲜度指标的变化进行更新。
对这种分层架构的支持是建立在 Apache Hudi 的核心功能和 Lakehouse 的其他 OSS 组件的混合之上的。分层架构所依赖的主要功能包括:
Robinhood 使用其数据湖站的分层架构来解决数据治理和 GDPR 相关要求。
大规模数据治理非常复杂,具有多个目标:
Robinhood 通过将 Lakehouse 组织成不同的区域,大规模地实现了这些目标 - Robinhood 的 Lakehouse 存储了 50,000 多个数据集。
区域标签和相关元数据用于跟踪和传播有关整个Lakehouse不同区域的信息。Robinhood 的团队实施了中央元数据服务来支持这些区域。该服务建立在我们上面看到的新鲜度元数据相同的分层架构之上。
而标记是在系统中手动和自动完成的(包括在源代码级别以编程方式),标记创建与模式管理工作位于同一位置。对标签的任何更改都会通过系统中的 Lint 检查以及自动数据分类工具来强制执行、跟踪和监控,这有助于交叉检查标签并检测任何数据泄漏或异常。
Robinhood 有效实施了 PII 删除操作,这是 GDPR 的“被遗忘权”所必需的——欧洲通用数据保护条例 (GDPR) 和加州消费者法案所要求的隐私法 (CCPA)。
在像 Robinhood 这样庞大而复杂的 Lakehouse 中,很难支持 PII 跟踪和掩码,但这是高效、符合 GDPR 的实施 PII 删除所需的。需要能够根据需要删除整个 PB 级数据湖库中单个用户的所有 PII。这必须快速、高效地完成,并且不能影响其他用户。Varadarajan 解释说,Robinhood 的实现仅依赖于两个(实现起来很棘手)元数据服务:
这两种元数据(ID 和掩码)在整个 Lakehouse 中得到普遍应用和跟踪。因此,PII 删除操作可以通过标准的 Apachi Hudi 删除操作来实现,该操作高效、快速,并且在整个 Lakehouse 上运行。
"Apache Hudi 是我们数据湖站的核心组件。它使我们能够高效运营、满足 SLA 并实现 GDPR 合规性。" — Balaji Varadarajan,Robinhood 高级工程师, Apache Hudi PMC成员
在 Apache Hudi 驱动、OSS 支持的数据Lakehouse之上构建分层架构的许多好处。具体来说:
Robinhood Lakehouse 利用其对 Apache Hudi 和相关 OSS 项目的依赖来获得相对于竞争对手的战略优势。他们实施了可靠的数据治理机制,有效且大规模地了解 GDPR 合规性,并且能够处理指数级数据和处理增长。它们还可以支持各种元数据、跟踪和其他 SLA,例如数据新鲜度。