Apache Paimon 流式湖仓介绍说明


文章目录

  • 前言
  • 选择 Paimon 的原因
  • Apache Paimon 功能
    • 一致性保证
    • Paimon 表类型
    • 数据湖写入
    • 标签和时间线回溯
    • 捕获变更数据写入数据湖
    • LSM 和分层文件重用
    • 流处理案例
    • 使用 Paimon 作为消息队列

前言

Apache Flink 自诞生以来经历了重大演变,如今,它不仅充当批处理和流数据处理的统一引擎,而且为迈向新时代铺平了道路:流式数据湖。
Apache Flink 的概念是动态表,与数据库中的物化视图类似,但是,动态表不能直接查询,因此社区提出使用中间表进行查询,就演变出了 Paimon。

选择 Paimon 的原因

为 Apache Flink 提供利用表格式的存储层,以便可以直接访问动态表中的中间数据的方式被称为 Lakehouse 的存储设计,已经成为了业界数据湖的标准。它将对象存储的廉价性与数仓的可扩展性和优化过查询的特性相结合,目前比较出名的有 Apache Iceberg, Delta Lake 和 Apache Hudi。
社区之所以重新创建一个 Paimon 项目,是因为 Paimon 是和 Flink 原生相结合的,可以和 FLink CDC 天然适配。
流式数据湖需要支持一下特性:

  • 数据的快速写入
  • 变更数据同步更新
  • 高效的实时数据分析

而 Paimon 可以提供以下核心功能:

  • 统一批处理和流处理: Paimon 支持批量读取和写入,以及流式写入变更数据和流式读取表 changelogs。
  • 数据湖作为数据湖存储,Paimon 具有以下优势:低成本、高可靠性、可扩展的元数据。
  • merge 引擎: Paimon支持丰富的合并引擎, 默认情况下,保留主键的最后一项。还可以使用“部分更新”或“聚合”引擎。
  • Changelog 生成器: Paimon 支持丰富的 Changelog 生成器,例如“lookup”和“full-compaction”。正确的变更日志可以简化流管道的构建。
  • Append Only Tables: Paimon支持Append Only表,自动压缩小文件,并提供有序的流读取。可以使用它来替换消息队列。

所有这些特性使 Lakehouse 能够以流优先设计的方式发展,从而产生了Streamhouseimage.png
Streamhouse 架构结合了用于流处理的 Apache Flink 和作为流存储层的 Apache Paimon。
Streamhouse 的核心思想是使用一行语句以一种轻松简单的方式,将来自 CDC 的 ETL 的数据或者日志数据,以流式传输的方式加载至廉价的对象存储中。
当数据进入数据湖时,用户可以创建不同的作业来创建不同的业务层 - 即 ODS、DWD、DWS 和 ADS - 在数据流动时负责更新。
同时,因为数据湖中的数据可以直接访问,我们可以在上层应用中添加任何想要的查询引擎——OLAP 系统(如 Apache Doris 和 StarRocks)或查询引擎(如 Flink SQL、Spark、Trino 或 Hive)—— 来运行批量或增量查询动态表快照的任务。

Apache Paimon 功能

我们需要先了解一些 Paimon 的基本概念,才能更好的理解 Paimon 功能:
快照

  • 快照捕获表在某个时间点的状态。用户可以通过最新的快照访问表的最新数据,并利用时间线回溯通过较早的快照访问表的先前状态。

分区

  • Paimon 采用与 Apache Hive 相同的分区概念来分离数据。
  • 分区是一种可选方法,可根据日期、城市和部门等特定列的值将表划分为相关部分。每个表可以有一个或多个分区键来标识特定分区。
  • 通过分区,用户可以高效地操作表中的一片记录。

  • 未分区表或分区表中的分区被细分为存储桶,为数据提供额外的结构,以便更有效地查询。
  • 桶是读写的最小存储单元,因此桶的数量决定了最大处理并行度。

一致性保证

Paimon 写入使用两阶段提交协议以原子方式将一批记录提交到表中,每次提交最多产生两个快照。
对于任意多个同时修改表的写入任务,只要不修改同一个桶,任务可以并行提交写入数据。如果修改同一个桶,则仅保证快照隔离。最终表状态可能是两次提交的混合结果,但不会丢失任何更改。
Paimon 使用快照提供对任何表的不同版本的访问,并将数据文件分组到分区和存储桶中,并保证一致性。
它利用了一个LSM(Log-Structured Merge Tree)数据结构实现流数据的性能。每个存储桶基本上包含一个 LSM 树及其变更日志文件。
下图显示了 Paimon 的文件布局以及所有文件内容是如何组合在一起:
image.png

Paimon 表类型

主键表
这是一个基本的 cahngelog 表,默认表类型,用户可以在表中插入更新删除记录。
主键由一组包含每个记录的唯一值的列组成,Paimon 通过对每个存储桶内的主键进行排序来强制数据排序,允许用户通过对主键应用过滤条件来实现高性能查询。
由于该表用于存储changelogs 流,因此当具有相同主键的两个或多个记录到达时, Paimon 提供各种 Merge 引擎。

仅追加表
仅追加表是没有主键的表。该表只允许插入操作。不支持删除更新操作。此类表适合不需要更新的用例,例如日志数据同步。

外部日志系统
除了上述的表类型之外,Paimon 还支持外部日志系统。当使用外部日志系统并将数据写入数据湖时,数据也会写入到Kafka等系统中。如果使用外部日志系统,表文件和日志系统会记录所有写入,但流式查询产生的更改将来自日志系统而不是表文件。

数据湖写入

掌握了一些核心概念后,让我们换个角度来看看 Apache Paimon 的核心功能。
image.png
正如已经提到的,Paimon 通过利用分区和存储桶将数据写入数据湖,其中每个存储桶都包含一个 LSM 树。写入数据时,它允许创建标签(我们将在稍后详细解释),并且 LSM 分层结构允许文件重用,以优化性能并减少许多文件的创建。与其他架构相比,它不需要定义分区表,只需要一个主键。
这些表可以低延迟地实时流式传输,并允许实时查询、批量查询和增量查询。数据湖写入的参数调整具有很大的灵活性,允许用户在写入性能、查询性能和存储放大之间取得平衡。
例如,当知道任务执行存在资源压力时,可以选择Paimon的动态桶模式或设置合适的桶大小。如果资源压力持续存在,可以调整 checkpoint 间隔,或调整 Paimon 压缩参数,这样就不会阻塞,并确保更好的写入性能。
总体而言,Paimon 的可配置性很高,允许用户根据流式读取、批量读取和更新场景进行权衡。

标签和时间线回溯

Apache Paimon 利用标签的概念来允许访问不同的离线视图。离线视图基本上是表在某个时间点的快照,允许历史数据查询。标签允许用户及时回溯到表的先前版本。
标签可以自动创建和过期,并且基于快照。该标签将维护快照的清单和数据文件。

以下代码片段演示了在创建表时,用户可以指定自动创建的标签,例如每天生成一个标签,标签过期时间90天:

CREATE TABLE MyTable (id INT PRIMARY KEY NOT ENFORCED,...
) WITH ('tag.automatic-creation' 	= 'processing-time','tag.creation-period'		= 'daily','tag.creation-delay'		= '10 m','tag.num-retained-max'		= '90'
);INSERT INTO MyTable SELECT * FROM kafkaTable;-- Read latest snapshot
SELECT * FROM MyTable;-- Read Tag snapshot
SELECT * FROM MyTable VERSION AS OF '2023-07-26';-- Read Incremental data between Tags
SELECT * FROM MyTable paimon_incremental_query ('2023-07-25', '2023-07-26');

当在快照上创建这些标签时,它们将一直保留到过期策略生效(如果指定)。

捕获变更数据写入数据湖

Apache Paimon 最重要的功能之一是捕获变更数据写入数据湖,Paimon 集成了Flink CDC, 支持多种数据源的变更数据捕获。
image.png
一般在捕获变更数据写入时,很难同时从大型表中读取历史数据以及增量变更数据。
同时,我们需要一种增量读取大表的方法,并且当数据库包含数百或数千个表时,最大限度地减少与数据库的连接,才不会给系统带来太大压力。
Flink CDC 可以利用项目独有的增量快照算法来实现这一目标:
image.png
它读取历史数据,然后在不锁定数据库的情况下自动从Binlog中继续读取增量更改。如图所示,增量快照算法允许将大表分割成更小的块并并行读取它们。当自动切换发生时,只需要一项任务来读取增量变化。
目前 Paimon 已经支持 MySQL 和 MongoDB, Kafka 的 CDC。

LSM 和分层文件重用

接下来我们看一下Paimon LSM文件存储的复用:
image.png
Paimon 利用 LSM(日志结构化合并树)进行文件存储,并使用类似于 RocksDB 的分级压缩。 LSM数据结构的一个特点是,当增量数据到达时,并不一定需要合并到下层。
这允许较低级别的文件在两个标签之间重用,因为它们并不会总是受到压缩的影响。

流处理案例

Paimon 有三种流连接方式,双流连接、查询连接和增量更新(利用序列组):
image.png
双流连接要求流连接查询的两侧都保存在内存中,当状态变得太大时,运行连接的成本也会增加。 Paimon 一般直接从数据湖存储中查询数据。
Lookup Join允许通过 Flink Lookup Join 执行 Paimon 表的查找。使用查找连接时要记住的一件事是,更新维度表时,更改不会反映到下游。
部分增量更新 使用Sequence-Groups,使每个字段能够使用不同的更新方法,并且还支持各种合并引擎。它提供高吞吐量和近实时级别的延迟。
例如,假设 Paimon 收到三个记录:

  • <1, 23.0, 10, NULL>
  • <1,NULL,NULL,‘这是一本书’>
  • <1、25.2、NULL、NULL>

假设第一列为主键,则最终结果为:
<1, 25.2, 10, ‘这是一本书’>

使用 Paimon 作为消息队列

image.png
由于Paimon是面向实时处理的,所以有人难免会比较Paimon和Kafka架构,毕竟 Paimon在这方面也做了很多工作。
例如,它支持Append-only表,允许创建没有主键的表,只指定桶号。
桶类似于 Kafka 中的分区,它们提供严格的顺序保存,与Kafka的消息排序相同,但它们也支持Watermarks和Watermark对齐。同时,还支持Consumer ID。
写入过程中,可以自动合并小文件。
因此,从上图可以看出,其整体架构允许用户在某些用例下用Paimon替换Kafka。
Kafka 的真正能力是提供秒级的延迟。当业务用例不需要秒级延迟时,可以考虑使用Paimon来实现消息队列功能。
Apache Paimon 通常以分钟级延迟运行,因为写入数据湖取决于checkpoint 间隔。建议的checkpoint 间隔通常为一分钟,以避免生成许多影响查询性能的小文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕设选51还是stm32?51太简单?

如果你更倾向于挑战和深入学习&#xff0c;STM32可能是更好的选择。如果你希望更专注于底层硬件原理&#xff0c;51可能更适合。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff…

阿里云迁移到AWS云,九河云保姆级教程

随着云计算技术的不断发展,越来越多的企业开始将传统的IT基础设施迁移到云平台上,以获得更高的灵活性、可扩展性和成本效益。在众多云服务提供商中,阿里云和AWS都是备受青睐的选择。本文将探讨如何将阿里云上的资源顺利迁移到AWS云平台,并针对性地进行优化。我们九河云&#xf…

[图解]DDD领域驱动设计伪创新-聚合根06

0 00:00:00,740 --> 00:00:02,200 那刚才讲了 1 00:00:02,480 --> 00:00:04,211 Evans这个隐喻 2 00:00:04,211 --> 00:00:06,520 实际上背后是把集合 3 00:00:06,800 --> 00:00:08,560 当成了聚合 4 00:00:10,580 --> 00:00:14,350 那为什么有这样的一个隐…

OpenHarmony实战开发-如何使用AKI轻松实现跨语言调用。

介绍 针对JS与C/C跨语言访问场景&#xff0c;NAPI使用比较繁琐。而AKI提供了极简语法糖使用方式&#xff0c;一行代码完成JS与C/C的无障碍跨语言互调&#xff0c;使用方便。本示例将介绍使用AKI编写C跨线程调用JS函数场景。通过调用C全局函数&#xff0c;创建子线程来调用JS函…

GIS 数据格式转换

1、在线工具 mapshaper 2、数据上传 3、数据格式转换 导入数据可导出为多种格式&#xff1a;Shapefile、Json、GeoJson、CSV、TopJSON、KML、SVG

APP广告变现项目

APP广告变现项目 很多人觉得不可能&#xff0c;这是肯定存在的&#xff0c;不是现在才有的一个项目&#xff0c;这个项目的原理是怎么样呢&#xff0c;就是通过某些特定的app&#xff0c;然后看完广告就有收益&#xff0c;基本单次的观看单价都是在几毛到1块之间。 养机养好的…

阿里云服务器带宽多少钱?公网带宽收费标准全解析

阿里云服务器的公网带宽计费模式分为“按固定带宽”和“按使用流量”&#xff0c;有什么区别&#xff1f;按固定带宽是指直接购买多少M带宽&#xff0c;比如1M、5M、10M、100M等&#xff0c;阿里云直接分配用户所购买的带宽值&#xff0c;根据带宽大小先付费再使用&#xff1b;…

一套3种风格经典的wordpress免费主题模板

wordpress免费企业主题 https://www.wpniu.com/themes/39.html 免费wordpress企业模板 https://www.wpniu.com/themes/43.html 免费wordpress企业主题 https://www.wpniu.com/themes/44.html

波奇学Linux:ip协议

ip报头是c语言的结构体 报头和有效载荷如何分离&#xff1f; 固定长度四位首部长度 4位版本号就是IPV4 8位服务类型&#xff1a;4位TOS位段和位保留字段 4位TOS分别表示&#xff1a;最小延时&#xff0c;最大吞吐量&#xff0c;最高可靠性&#xff0c;最小成本 给路由器提…

【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十六篇&#xff1a;Java连接和操作MySQL数据库。 我将提供一个简单的示例代码&#xff0c;涵盖数据库连接、查询、插入和更新等操作。 一、下载MySQL驱动包 1.下载地址&#xff1a;MySQL :: Download Connector/J 2.解…

Navicat for MySQL 使用基础与 SQL 语言的DDL

一、目的&#xff1a; Navicat for MySQL 是一套专为 MySQL 设计的高性能数据库管理及开发 工具。它可以用于任何版本 3.21 或以上的 MySQL 数据库服务器&#xff0c;并支持大 部份 MySQL 最新版本的功能&#xff0c;包括触发器、存储过程、函数、事件、视图、 管理用户等。…

VMware配置CentOS 7 并实现ssh连接

Vmware 17下载地址 ***永久许可证&#xff1a;***5Y012-8HL8P-0J8U0-032Q6-93KKF CentOS 7 下载地址 一、配置CentOS 如下 创建新的虚拟机&#xff0c;选择典型&#xff0c;点击下一步 选择上述下载镜像存储位置&#xff0c;选择镜像&#xff0c;点击下一步 3.填写相关信息…

微信小程序wx.getLocation 真机调试不出现隐私弹窗

在小程序的开发过程中&#xff0c;首页中包含要获取用户地理位置的功能&#xff0c;所以在这里的onLoad&#xff08;&#xff09;中调用了wx.getLocation()&#xff0c;模拟调试时一切正常&#xff0c;但到了真机环境中就隐私框就不再弹出&#xff0c;并且出现了报错&#xff0…

智能生活新体验:小米香薰加湿器技术解码

在现代家居生活中&#xff0c;科技与舒适性日益交织&#xff0c;智能家居产品成为提升生活品质的重要工具。小米香薰加湿器作为一款集科技与生活美学于一体的产品&#xff0c;其独特的设计和多功能性受到了广泛欢迎。今天&#xff0c;我们就来详细拆解这款融合了科技与香薰元素…

Sony Camera Remote SDK在Windows上的使用

Sony官方提供了相机遥控软件开发包&#xff0c;允许用户自行开发应用软件&#xff0c;实现对相机的远程控制&#xff0c;包括拍摄、监看和文件传输等。截至目前最新的版本是2024.4.12发布的1.12.00版本&#xff0c;下载链接如下&#xff1a;Camera Remote SDK | LICENSE AGREEM…

初学python记录:力扣706. 设计哈希映射

题目&#xff1a; 不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;。 实现 MyHashMap 类&#xff1a; MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中&#x…

SpringCloud之LoadBalancer自定义负载均衡算法,基于nacos权重

LoadBalancer基于Nacos权重自定义负载算法 ReactorLoadBalancer接口&#xff0c;实现自定义负载算法需要实现该接口&#xff0c;并实现choose逻辑&#xff0c;选取对应的节点 public interface ReactorLoadBalancer<T> extends ReactiveLoadBalancer<T> {Mono<…

VMware Workstation部署最新版OpenWrt 23.05.3

正文共&#xff1a;1456 字 51 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们之前介绍了如何在VMware Workstation上安装OpenWrt&#xff08;软路由是啥&#xff1f;OpenWrt又是啥&#xff1f;长啥样&#xff1f;在VMware装一个瞅瞅&#xff09;&#xff0c;也介绍了如何…

【计算机毕业设计】物流管理系统设计与实现——后附源码

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

ubuntu16.04安装Eclipse C/C++

1.安装 JDK 官网源码安装 首先打开JDK官网&#xff0c;JDK1.8的下载网址为&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/#java8-windows&#xff0c;进入到网址如下图所示&#xff1a; 向下滑动到 JDK1.8的下载界面&#xff0c;如下图所示&#xff1a…