为什么Paimon值得期待?

这篇具有很好参考价值的文章主要介绍了为什么Paimon值得期待?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前段时间 Flink table store 更名为 Apache Pimon ,并重新进入Apache incubator。截止目前,incubator-paimon项目已经在github上收获了600+ Star(https://github.com/apache/incubator-paimon):

为什么Paimon值得期待?

之前虽然了解到Fink table store,但是没空去了解它,趁此机会,我也花了2天时间来专门对它探个究竟,看看到底值不值得研究。

Pimon目前只进行到0.4-SNAPSHOT的开发,社区提的Issue也很少,太少的Issus并不一定说明系统足够稳定,倒是可能表明当前使用的太不广泛。

为什么Paimon值得期待?

任何新生事物要得到广泛认可,都要经历这一冷启动阶段,除非它是像GPT那样。Anyway,我们先秉承客观立场,来分析下这款产品。官网很简洁,文档也少得可怜,但是基本功能和Get-started 倒是介绍到了:

为什么Paimon值得期待?

它定位是流数据湖平台(Streaming data lake platform),这点好像只有HUDI这么说自己是platform吧。比如:

Iceberg is a high-performance format for huge analytic tables;

Delta Lake is an open-source storage framework;

Apache Hudi is a transactional data lake platform that brings database and data warehouse capabilities to the data lake.

看来Paimon野心不小啊。不过,对我们使用方倒是好事,但是要做好数据湖平台,基本的能力具备吗?至少拿HUDI的能力先来过一遍:

  • Transaction事务;

  • row-level update/delete行级更新;

  • change stream 变更流

然后,在此基础上实现以下能力:

  • 数据摄取,支持批和流;

  • 支持Schema evolution;

  • 支持snapshot,time travel

  • 统一并支持不同的存储引擎,像HDFS,S3、OSS都不用说了;

  • 对接不同的计算引擎,Hive、Spark、Flink、Trino,毕竟这些是数据湖产品的标配;

  • 支持批查询、OLAP查询;

  • 支持增量查询;

如果能力足够,再支持一些能力,比如完善的sql能力、changlog流读流写能力、lookup点查询能力就更好了。如果说上述能力都具备,那就要拿出来练一练,看看是不是吹的?毕竟,这额外的特色功能连Iceberg都不支持,Paimon刚出茅庐,怎么敢口出狂言呢,而且我们被Iceberg坑了一次,这次得长长记性。

从Paimon的系统架构中,我们也能明白一二:

为什么Paimon值得期待?

  1. Paimon基于HDFS、OSS、S3 ,提供了统一存储,提供统一存储的表格式也是情理之中,也是预料之中。

  2. Paimon内部使用了LSM。好家伙,看来LSM是Paimon的能力核心了,毕竟想提供DB级的体验,没有LSM怎么能行?至少极致的写入能力应该不用过于担心。LSM无论是理论还是工程实现在业界都比较成熟,可供借鉴的系统不要太多。差别就是具体的实现差异,比如如何解决写放大问题?何时以及如何compact?

  3. LSM支持范围查询和点查询能力,所以它提到Lookup join也是没有大问题的,问题是它如何进一步提升其性能了。比如可以引入二级索引bloomfilter等。

  4. changelog在官网中有提到,它支持将changlog写入本地文件或者发送到kafka供下游消费。

  5. 内核能力具备之后,外围的多模式数据导入与查询只是上层应用的事情,这块儿借助Spark、Hive、Trino、Flink就可以实现。最后就是Schema Evolution与文件组织方式了,这个在官网中也有介绍:

为什么Paimon值得期待?

文件组织并没有亮点,直接借鉴(抄袭)Iceberg前辈的思路就好了。Schema保存在snapshot,snapshot由manifest-list组成,而manifest-list又由manifest组成,manifest由datafile组成。最底层的datafile由partition和bucket决定(定位)。在bucket中维护了LSM结构。

最后就是多模读的能力了。具备snapshot能力,自然就具备了增量(流)读的能力。LSM的支持,使得增量读和批量读的高效读取能力成为可能,因为LSM在写入后的合并阶段能够保证顺序。

关于Paimon的一些更多能力介绍,我从Paimon PMC 22年9月份的演讲中寻得蛛丝马迹,他们对Flink Table Store 设计提出了一些基本要求:

① 是一个流批统一的存储,提供一定的 OLAP 查询能力(基于列式存储),做到毫秒级别的实时流式读取,能够支持 Insert Overwrite。

这是早期设计跟Flink绑定时候的要求,从中,我们姑且相信借助Flink,基于列式存储的OLAP 查询能力是不难做到的,但是要做到极致的交互查询能力估计够呛,这是题外话,不能期待过高,暂时不表。但不意味着无法实现,要知道Clickhouse基于LSM能够提供极致的单机单表查询能力,在这方面,Paimon要达到这种能力理论上也是可能的。

毫秒级别的实时流式读取能力针对append Stream scan应该是问题不大,但是读取需要合并的更新数据流就不一定了。

② 是最为完善的 Flink Connector,支持 Flink SQL 的全部概念,支持任意 Flink Job 的输出,支持所有数据类型。

Flink table store 全面支持 Flink SQL语法,这个从字节火山引擎的使用反馈可以印证这一点,比如它在建表ddl的确支持分区、分桶、主键等能力。借助Flink实现批写入、流式写入也是没问题的。

③ 是最好用的 Flink Connector,能够结合 Flink SQL 提供 DB 级别的体验,并且支持大规模更新。

重点来了,DB级别的体验需要支持上述事务、行级更新、批更新、lookup、change stream等等,OLTP的能力大家都懂的,再加上OLAP的能力,这会是个什么系统,一般人不敢说。

在演讲后面同时也提到了 Flink Table Store后续规划的三个目标:

第一,好用的流存储。比如多作业写同时写入、Compaction 分离,比如完整的 Streaming Data Warehouse API 设计,包括完整的 DDL、Update、Delete 语法、Time Travel API 支持。以上能力将与 Flink 社区一起在 1.17 版本中重点攻克。

第二,准确的流存储。存储本身能够产生完整的 Changelog ,下游的流计算易用性才能真正得到提高。

第三,可连接的流存储。继续增强 Lookup Join ,实现二级索引以更好地 Join,实现维表对齐能力,解决维表不确定性。

如果把基本要求看做理想的话,那后续规划的目标就是现实跟理想的差距。不管理想能否实现,从理想的动员能力来看,的确起到了效果:DB级的体验多么令人向往,连我都有一种想去贡献代码的冲动了。以上就是外界获取的关于Paimon 的设计与能力,截止目前,它又有了什么样的能力以及这些能力落地的程度还需要亲自去代码里检查了,下面我就从最重要的读写模块来从代码中梳理下:

为什么Paimon值得期待?

这是实现的写入的基本流程,数据是先写内存缓存表,当缓存满的时候,再flush到磁盘Level0级,同时触发LSM合并。合并完成之后,再commit生成snapshot。

为什么Paimon值得期待?

Paimon有多处涉及到读取过程,比如lookup、scan以及在compact的过程中也会涉及到读取。这里以lookup过程为例,它依次按照Level从高到低的顺序查询每个level是否命中记录。在查询每个level过程中,采用二分法定位目标记录所在的datafile元数据文件,然后通过datafile元数据文件找到物理存储文件,最后在物理文件中通过r二级索引bloomfilte定位目标记录。

总结

从上述调研情况来看,Paimon具备了Iceberg的几乎所有能力,同时引入LSM提升了使用Iceberg合并删除文件的检索能力。Paimon通过partition和bucket中引入细粒度的LSM和二级索引,提供了分布式查询能力,提供了不依赖Hbase实现lookup的可能性。Paimon支持主键、分区、分桶等的能力,以及底层存储引擎上面的列存、预排序,以及向量化查询能力,提供了不依赖Clickhouse实现极致简单查询能力的可能。Paimon目前从跟Flink的深度绑定中解脱出来,支持了多引擎,同时Paimon支持的多流join能力,有助于将状态存储在存储层中实现,从而降低Flink本身的State压力,所以Paimon 值得期待。文章来源地址https://www.toymoban.com/news/detail-501878.html

到了这里,关于为什么Paimon值得期待?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么 Flink 抛弃了 Scala

    曾经红遍一时的Scala 想当初Spark横空出世之后,Scala简直就是语言界的一颗璀璨新星,惹得大家纷纷侧目,连Kafka这类技术框架也选择用Scala语言进行开发重构。 可如今,Flink竟然公开宣布弃用Scala 在Flink1.18的官方文档里,有一句非常严肃的话:所有的Flink Scala APIs已被标记为废

    2024年02月04日
    浏览(41)
  • 为什么选择 Flink 做实时处理

    优质博文:IT-BLOG-CN 【1】流数据更真实地反映了我们的生活方式(实时聊天); 【2】传统的数据架构是基于有限数据集的(Spark 是基于微批次数据处理); 【3】我们的目标:低延迟、高吞吐(分布式架构,可能会出现顺序上的混乱,比如统计1个小时内,可能在1小时的时候

    2024年03月11日
    浏览(79)
  • 【译】为什么AI难以概念化时间

    原作:FNTGAI 引言:如何弥合AI与先验概念之间的鸿沟   时间不是你能看到、听到或触摸到的东西。这就是康德所说的“先验”,意味着它在感官中没有对应物。你无法给时间贴标签或分类。这使得AI很难建立时间概念。例如,考虑一下当您询问 ChatGPT 您与它交谈了多长时间时

    2024年02月20日
    浏览(37)
  • 为什么不建议企业用薪资系统来跟踪项目时间?

    身处在一个每分钟都很重要的世界里,企业必须勤于管理时间和工资。 虽然使用薪资系统进行时间跟踪似乎是一个实用的解决方案,但这种方法可能导致许多问题。 本文将讨论专用的时间跟踪软件对任何组织都必不可少的原因,以及依靠薪资系统进行时间管理可能产生的挑

    2024年02月12日
    浏览(41)
  • 为什么堆排序的时间复杂度是O(N*logN)?

    目录 前言: 堆排序(以排升序为例) 步骤(用大根堆,倒这排,排升序): 1.先把要排列的数组建立成大根堆 2.堆顶元素(82)和最后一个元素交换(2) 3.无视掉交换后的元素(82),对(2)进行向下调整 翻译成代码 mian方法: heapSortUp方法: siftDown方法: 堆排序时间复杂

    2024年04月25日
    浏览(24)
  • TCP四次握手为什么客户端等待的时间是2MSL

    MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。 第三次握手服务端发送FIN报文段,最长情况下经过MSL的时间可以到达客户端,客户端在收到来自服务端的FIN报文段之后发送ACK报文

    2024年02月15日
    浏览(45)
  • tracert命令返回的三个时间为什么有时会出现1个或2个星号?

    如图,三个时间里有1个或者2个显示星号,这是为什么呢? 如果是配置了ACL丢弃了响应报文的话按理应该3个都显示星号呀 直接ping这个ip的话不会出现丢包,时延也很稳定 这个问题很诡异,演绎一下,仅供参考。首先traceroute 是利用“TTL Expired”功能,让沿途的路由器每次遭遇

    2024年02月11日
    浏览(39)
  • 为什么Flink-CDC读取Decimal等数值类型变成了非数值字符串

    每遇到一个问题,在经过努力研究明白之后,总想写点东西记录。怎奈又没这个好习惯,过了一两天这个激情就没了,想写也写不出来了。最近在做一个flink-cdc采集数据的测试和产品化开发,遇到一个数据转换的问题,折腾了我两个早上,有些心血来潮,就记录一下吧,对我

    2023年04月09日
    浏览(44)
  • 【哈希表】为什么哈希表的插入/删除/查找时间复杂度为O(1)

    在使用哈希表时,往往会出现哈希冲突,此时就会通过 链表/红黑树 的方法来解决冲突,此时引入 链表/红黑树 那么时间复杂度就不是严格的O(1)。 我们首先要明白N代表什么,N是指问题的规模大小。 在使用哈希表时,所有的数据个数为N,链表的长度肯定不是N,( 因为存在

    2024年03月21日
    浏览(47)
  • 【状态管理|概述】Flink的状态管理:为什么需要state、怎么保存state、对于state过大怎么处理

    按照数据的划分和扩张方式,Flink中大致分为2类: Keyed States:记录每个Key对应的状态值 因为一个任务的并行度有多少,就会有多少个子任务,当key的范围大于并行度时,就会出现一个subTask上可能包含多个Key(),但不同Task上不会出现相同的Key(解决了shuffle的问题?)   常

    2024年02月01日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包