热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Debezium和ApacheIceberg创建数据湖

今天为数据分析、数据报告或机器学习构建数据湖已经是一种常见的做法。在这篇博文中,我们将描述一种构建数据湖的简单方法。该解决方案使用基于Debezium的实时数据管道,支持ACID事



今天为数据分析、数据报告或机器学习构建数据湖已经是一种常见的做法。
在这篇博文中,我们将描述一种构建数据湖的简单方法。该解决方案使用基于 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 有version-2-row-level-deletes" class='body_href' >数据和删除文件的概念。数据文件是 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 消费者的扩展点。


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 时,所有接收到的记录都会附加到目标表中。不进行重复数据删除或记录删除。使用附加模式可以分析记录的整个更改历史记录。



推荐阅读
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
author-avatar
独孤求独孤_715
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有