7

使用 Debezium 和 Apache Iceberg 创建数据湖

 2 years ago
source link: https://www.jdon.com/57425
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
使用 Debezium 和 Apache Iceberg 创建数据湖

今天为数据分析、数据报告或机器学习构建数据湖已经是一种常见的做法。

在这篇博文中,我们将描述一种构建数据湖的简单方法。该解决方案使用基于 Debezium 的实时数据管道,支持 ACID 事务、SQL 更新并且具有高度可扩展性。并且不需要 Apache Kafka 或 Apache Spark 应用程序来构建数据馈送,从而降低了整体解决方案的复杂性。

让我们从数据湖概念的简短描述开始:数据湖:通常是数据的中央存储,包括源系统数据、传感器数据、社交数据等的原始副本。您可以按原样存储数据,而无需先处理数据,然后再运行不同类型的分析。

Apache IceBerg

由于操作数据通常驻留在关系数据库或 NoSQL 数据存储中,问题是如何将数据传播到数据湖中。这就是Debezium Server Iceberg项目的用武之地:基于 Debezium 和 Apache Iceberg,它允许您处理来自源数据库的实时数据更改事件,并将它们上传到 Iceberg 支持的任何对象存储。

那么让我们仔细看看这两个项目。

  • Debezium是一个用于更改数据捕获的开源分布式平台。Debezium 从数据库的事务日志中提取更改事件,并通过事件流平台使用不同的格式(例如 JSON、Apache Avro、Google Protocol Buffers 等)将它们交付给消费者。大多数时候,Debezium 与 A​​pache Kafka 和 Kafka Connect 一起使用。但是通过 Debezium Server,Kinesis、Google Pub/Sub 等其他消息传递基础设施的用户也可以从 Debezium 的变更数据捕获功能中受益。在这里您可以看到当前支持的目的地
  • Apache Iceberg是一种“用于大型分析数据集的开放表格式。Iceberg 使用高性能表格式向包括 Spark、Trino、PrestoDB、Flink 和 Hive 在内的计算引擎添加表,就像 SQL 表一样工作。” 它支持 ACID 插入以及行级删除和更新。它提供了一个 Java API 来管理表元数据,如模式和分区规范,以及存储表数据的数据文件。Apache Iceberg 有数据和删除文件的概念。数据文件是 Iceberg 在幕后用来保存实际数据的文件。删除文件是对在现有数据文件中删除的行进行编码的不可变文件。这就是 Iceberg 在不重写文件的情况下删除/替换不可变数据文件中的单个行的方式。在 Debezium Server Iceberg 的情况下,这些是不可变的Apache Parquet文件,这种格式被设计为“与 CSV 或 TSV 文件等基于行的文件相比,数据的高效且高性能的扁平列式存储格式”。
  • Debezium Server Iceberg基于 Debezium 和 Apache Iceberg,让为您的数据湖设置低延迟数据摄取管道变得非常简单。该项目完全开源,使用 Apache 2.0 许可。Debezium Server Iceberg 仍然是一个年轻的项目,还有很多地方需要改进。请随意测试、提供反馈、打开功能请求或发送拉取请求。您可以查看更多示例并使用此项目开始试验 Iceberg 和 Spark 。 

Apache Iceberg 消费者

Debezium Server 提供了一个 SPI 来实现新的接收器适配器,这是用于创建 Apache Iceberg 消费者的扩展点。

debezium-iceberg.png

Iceberg 消费者将 CDC 更改事件转换为 Iceberg 数据文件,并使用 Iceberg Java API 将它们提交到目标表。它将每个 Debezium 源主题映射到目标 Iceberg 表。

当未找到给定的 Iceberg 目标表时,消费者使用更改事件模式创建它。此外,事件模式用于将更改事件本身映射到等效的Iceberg 记录。因此,debezium.format.value.schemas.enable必须设置配置选项。一旦 Debezium 更改事件被记录到 Iceberg 记录中,模式就会从数据中删除。

  • 默认情况下,Iceberg 消费者以 upsert 模式运行(debezium.sink.iceberg.upsert设置为true)。这意味着当源表中的一行被更新时,目标是用新的更新版本替换的行。当从源中删除一行时,它也会从目标中删除。使用 upsert 模式时,目标数据与源数据保持一致。upsert 模式使用 Iceberg 等式删除功能,并使用 Debezium 更改数据事件的键(从源表的主键派生)创建删除文件。为避免重复数据,对每个批次进行重复数据删除,并且只保留最后一个版本的记录。
  • Append 模式这是最直接的操作模式,通过设置debezium.sink.iceberg.upsert为启用false。使用带有附加模式的 Debezium Server Iceberg 时,所有接收到的记录都会附加到目标表中。不进行重复数据删除或记录删除。使用附加模式可以分析记录的整个更改历史记录。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK