Paimon: Streaming data lake 数据湖项目的后起之秀

news2024/11/24 6:17:48

什么是Paimon?

Paimon的官网介绍是:Streaming data lake platform with high-speed data ingestion, changelog tracking and efficient real-time analytics.
Paimon 是流数据湖平台,具有高速数据摄取、变更日志跟踪和高效的实时分析能力

数据湖是大数据近年来的网红项目,熟知的开源数据湖三剑客 Apache hudiApache icebergDatabricks delta 近年来野蛮生长,目前各自背后也都有商业公司支持,投入了大量的人力物力去做研发和宣传。

Paimon的前身是flink-table-storeFTS
最开始是作为 Flink 的子项目加入了 Apache 社区,由 Flink 团队主导研发,开源后不够火
也许是因为数据湖市场早已被三剑客占据了大半,也许是宣传的力度不够,也许是 Flink 子项目限制了它作为数据湖产品的发展。
可能也正是这些种种的原因促成 flink-table-store 作为独立项目重新加入 Apache,不再依附 Flink,并且更名为Paimon

提供的核心功能

  • Unified Batch & Streaming: 统一批流读写,支持批写、批读、流写、流读
  • Data Lake: 作为数据湖存储,具有成本低、可靠性高、元数据可扩展等优点。
  • Merge Engines: 支持丰富的合并【merge】引擎。缺省情况下,根据主键保留最新的一条记录,当然还可以根据业务需要,使用使用“部分更新【partial-update】”或“聚合【aggregation】”引擎等
  • Changelog producer:支持丰富的changelog producer,如“lookup”和“full-compaction”。正确的changelog 可以简化流pipeline的构建
  • Append Only Tables: 支持只追加表,自动压缩小文件,并提供有序的流读取。您可以使用它来替换消息队列。

架构

在这里插入图片描述

  • 读/写:Paimon支持多种方式来读/写数据和执行OLAP查询。
    • 对于读取,它支持从历史快照(批处理模式)、从最新偏移量(流模式)中读取数据,或者以混合方式读取增量快照
    • 对于写操作,它支持从数据库变更日志(CDC)进行流同步,或者从离线数据进行批量插入/覆盖。
  • 生态系统:除了Apache Flink, Paimon还支持其他计算引擎的读取,如Apache Hive、Apache Spark和Trino。
  • 内部:在底层,Paimon将列文件存储在文件系统/对象存储中,并使用LSM树结构来支持大量数据更新和高性能查询。
    • 统一存储: 提供表抽象。它的使用方式与传统数据库没有什么不同:
      • 在批处理执行模式下,它就像一个Hive表,支持批处理SQL的各种操作。查询最新快照。
      • 在流式执行模式下,它的作用类似于消息队列。查询它的行为类似于从历史数据永远不会过期的消息队列查询流更改日志。

基本概念

在这里插入图片描述

Snapshot

快照捕获表在某个时间点的状态。

  • 用户可以通过最新的快照访问表的最新数据
  • 也可以通过时间旅行【time traveling】,通过较早的快照访问表的先前状态。

Partition

Paimon采用与Apache Hive相同的分区概念来分离数据。

  • 分区是一种可选的方法,可以根据特定列(如日期、城市和部门)的值将表划分为相关的多个部分,
  • 可以使用一个或多个分区键来标识一个特定的分区。
  • 通过分区,用户可以有效地操作表中的记录切片
  • 注意:如果定义了主键,分区键必须是主键的子集。

Bucket

未分区的表或分区表中的分区被细分为桶,为数据提供额外的结构,用于更有效的查询。

  • 一个bucket的范围由记录中一个或多个列的哈希值决定。
    • 用户可以通过提供bucket-key选项来指定bucket列。
    • 如果没有指定bucket-key选项,则使用主键(如果定义了)或完整记录作为bucket-key。
  • bucket是用于读写的最小存储单元,因此bucket的数量限制了最大的处理并行性。但是,这个数字不应该太大,因为它将导致大量小文件和低读取性能。一般情况下,建议每个bucket中的数据大小为1GB左右

Consistency Guarantees

  • Paimon writer使用两阶段提交协议自动将一批记录提交到表中。每次提交在提交时最多产生两个快照。
  • 对于任何两个同时修改一个表的writer,
    • 只要他们没有修改同一个桶,他们的提交就是可序列化的。
    • 如果修改的是同一个桶,则只保证快照隔离。也就是说,最终的表状态可能是两次提交的混合状态,但不会丢失任何更改。

面临的难题

  • 全链路实时流动
  • 全链路实时可查。 数据分层存储,则存储对应的挑战如下:
    • 全增量一体摄入
    • 消息队列的流读
    • 变更日志的流读
    • 可流join的存储
    • 丰富的生态查询
  • 数据分层可复用
    在这里插入图片描述

使用示例

以下资料是根据Flink Table Store 0.3 构建流式数仓最佳实践|李劲松梳理产生的。

场景说明

多表连接到一起,打成大宽表,并流写到下游的clickhouse和ES中

  • 订单表Sales和退货表Returns同主键
  • Sales表有顾客表的customer_id外键
  • Returns有退货原因表reason_id外键
  • 顾客表Customer表可更新
  • Reason表不可更新
    在这里插入图片描述

使用FTS操作

  • 使用partial-update Merge Engines,根据表的主键,写入订单表
  • 使用full-compaction Changelog producer,保证表可以产生正确有序的changelog
    在这里插入图片描述
  • 使用lookup join,写入退货及退货原因表
    在这里插入图片描述
  • 使用双流join,写入顾客表,state只包含关联主键和顾客表的信息,很轻量
    在这里插入图片描述
  • compaction时产生changelogs,并触发将数据写入下游的clickhouse及ES,面向用户提供即席查询功能
    在这里插入图片描述

FTS 0.3功能解读

全增量一体的数据摄入

在这里插入图片描述

消息队列的流读

在这里插入图片描述

变更日志的流读

在这里插入图片描述

流连接

  • 双流连接和维表连接
    • 因为是每条记录lookup,代价很大
      在这里插入图片描述
  • 流连接: Partial Update连接
    • 注意:表需要有相同的主键
      在这里插入图片描述

参考

Flink Table Store 0.3 构建流式数仓最佳实践|李劲松

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

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

相关文章

unity什么是曲线动画?

介绍 unity什么是曲线动画? 在Unity中,曲线动画(Curve Animation)是一种基于曲线的动画系统,它允许你通过在时间轴上编辑曲线来控制游戏对象的某个属性在时间上的变化。曲线动画可以用于很多方面,比如控制…

Linux套接字编程-2

在上一篇博客中,我们先对套接字编程的内容进行了一个简单涵盖,并详细陈述了UDP协议内容。本篇我们承接上文,讲述完UDP后,我们来讲解TCP。 目录 1.TCP协议 1.1通信两端流程 1.1.1服务端流程 1.1.2客户端流程 1.2套接字相关操…

LeCun、田渊栋参与撰写,70页「自监督学习」大全

来源 | 机器之心 微信号:almosthuman2014 「关于自监督学习,你想知道但又不敢问的一切都在这里了。」图灵奖得主、Meta 人工智能首席科学家 Yann LeCun 刚刚发了这样一则推文。 在推文中,LeCun 介绍了他和 Meta 人工智能研究院研究员、研究经…

数据结构学习记录——判断是否为同一颗二叉搜索树(题意理解、求解思路、程序搭建框架、具体函数的实现)

目录 题意理解 问题 描述 输入样例 输出样例 求解思路 建两棵二叉树 不建树 建一棵树 搜索树表示 程序框架搭建 如何建搜索树 如何判别 方法 查找函数 判断函数 其他函数 题意理解 给定一个插入序列就可以唯一确定一颗二叉搜索树。 但是,一颗给定…

libigl添加Viewer Menu时出现imgui相关的错误:无法打开包括文件: “imgui.h”: No such file or directory

libigl添加如下图所示的Viewer Menu时,出现了“无法打开包括文件: “imgui.h”: No such file or directory”的错误 很显然是libigl内嵌的imgui出了问题 从项目路径libigl-example-project-main\out\build\x64-Release\_deps\libigl-src\include\igl\opengl\glfw\…

【谷粒商城之CompletableFuture异步编排】

本笔记内容为尚硅谷谷粒商城CompletableFuture异步编排部分 目录 一、线程回顾 1 、初始化线程的 4 种方式 2.、线程池的七大参数 运行流程: 3、常见的4种线程池 4、开发中为什么使用线程池 二、CompletableFuture 异步编排 业务场景 1、创建异步对象 …

无线化超轻薄,香港城市大学体感反馈贴片WeTac

此前,青亭网曾报道香港城市大学与腾讯Robotics X Lab合作研发的低电压体感方案,原理是通过微电流刺激来模拟触觉,可模拟微小物体的体感。近期,香港城市大学的一组科研人员也公布了一项类似的方案:WeTac,该方…

轻松上手:使用VSCode调试Python模块级代码的完整教程

安装VSCode:请确保已经安装了Visual Studio Code。安装Python插件:在VSCode中,转到Extensions视图 (View -> Extensions) 并搜索"Python"。找到由Microsoft提供的插件并点击安装。重启VSCode以确保插件安装正确。准备项目&#…

边听歌边充电LDR6028+LDR9201既能充电又能OTG方案

随着type-c接口的普及,市面上的手机,平板,笔电逐渐都采用了type-c接口,设备为了不断的追求更轻薄的机身和防水要求慢慢的取消了一些影响手机外观完整性的接口,比如3.5mm耳机孔。 有线耳机用户一般会选择使用C口转3.5m…

资深架构师解读零代码开发平台—如何不写代码实现流程审批

审批节点 “审批节点:” 流程中涉及审批时,需要用到审批节点。审批可通过或者驳回,也可以发送通知。可以多人会签/或签审批。 1. 审批节点 1.1 审批设置 ① 审批方式 审批方式默认为或签方式,只一个人审批即可 当选择会签时&#…

【英语】大学英语CET考试,口语考试介绍与备考1(讲义笔记)

文章目录 1、考试基本信息2、考试题型介绍3.1 短文朗读与回答问题(语音篇)3.1.1 语音篇真题3.1.2 语音篇6项基础知识3.1.3 语音语调练习(名言名句)3.1.4 短文朗读练习材料(真题) 3.2 自我介绍与看图说话&am…

IC面试,你一定要准备好这些(内附大厂面试题目)

大家都知道,面试的表现会对于个人职业发展的重要性,不仅能决定是否录用,还会影响到后期的谈薪,所以面试前一定要做好充分的准备。 怎么准备面试? 这里就建议简历上的表述尽量客观化、专业化,多使用数字和…

目标跟踪综述 (持续更新)

这几天对目标跟踪挺感兴趣的,但是在CSDN和知乎上面找的相关介绍资料都看的一知半解,所以自己找了一篇 2022-04-26 发表的综述文章作下笔记学习下。 目录 一、基于相关滤波的目标跟踪算法 1、相关滤波视频目标跟踪算法的框架 2、相关滤波目标跟踪算法…

GPT-4开源平替miniGPT-4来了,仅需23G显存单机可run,附论文、项目代码地址

来源 | 新智元 微信号:AI-era 先是ChatGPT的发布给世界带来了一点小小的NLP震撼,随后发布的GPT-4更是破圈计算机视觉,展现了非凡的多模态能力。 不光能读懂人类的梗,给个手绘草图甚至可以直接写出网站的代码,彻底颠覆…

百度地图 TypeError: Cannot set properties of undefined (setting ‘Bm‘)

这类问题出现的原因一般是,页面还没有加载完,地图开始加载,或者地图加载在页面加载之前 在项目中,我用isMapLoading控制地图的加载,false–加载,true–不加载,在data()中设置isMapLoadingtrue

矩阵的秩的计算

definition 1 矩阵的秩 矩阵的列空间的维度 矩阵的零空间的秩 矩阵的自由变量的个数 n - r(A) definition 2 这两个证明很好证 第三个证明可以用零空间的秩 example 1 hyperlink

HTTPS建立连接原理、SSL工作原理

HTTPS与HTTP相比有什么区别? HTTPS保证安全的原理是什么? HTTPS是如何建立连接的? 巨人的肩膀 3.1 HTTP 常见面试题 | 小林coding HTTP与HTTPS的区别 HTTP是超文本传输协议,传输的内容是明文(HTTP1.1及之前版本)。HTTPS在TCP与HT…

【LeetCode】27. 移除元素

题目链接:https://leetcode.cn/problems/remove-element/ 📕题目要求: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,…

【原创】生成文件MD5图像,类似于GitHub的像素风格头像

前言 我想通过文件的md5生成关于这个md5的图像,类似于GitHub的随机像素头像,用处是让这个md5更加直观,也能用于生成各种用户头像,跟GitHub一样。 网上搜了一下,没有现成的方法,只能有一篇类似的文章可以借…

第N2周:中文文本分类-Pytorch实现

目录 一、前言二、准备工作三、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 三、模型构建1. 搭建模型2. 初始化模型3. 定义训练与评估函数 四、训练模型1. 拆分数据集并运行模型 一、前言 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 …