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

什么是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 构建流式数仓最佳实践|李劲松

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 路由

文章目录 Vue 路由安装简单实例NPM 路由实例 Vue 路由 本章节我们将为大家介绍 Vue.js 路由。 Vue.js 路由允许我们通过不同的 URL 访问不同的内容。 通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。 Vue.js…

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 1

生物数据的规模不断扩大和固有复杂性促使越来越多的人在生物学中使用机器学习来构建相关生物过程的信息和预测模型。所有机器学习技术都是把数据拟合到模型,然而,具体方法千差万别,乍一看似乎令人困惑。在这篇综述中,我们旨在向读…

绩效管理系统有哪些推荐?

绩效管理系统有哪些推荐?市面上的绩效管理系统五花八门,这就来给大家推荐几款优质的! 一、如何选择绩效管理系统 在选择绩效管理系统之前,需要先考虑以下几个问题: 了解你的企业目标和需求:在选择绩效管…

( 栈和队列) 225. 用队列实现栈 ——【Leetcode每日一题】

❓225. 用队列实现栈 难度:简单 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入…

shiro

1 什么是Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的 API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 1.2 与Spring Security的对比 Shiro: Shi…

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴。Typecho基于PHP5开发,支持多种数据库&…

ubuntu22.04安装ROS2

ubuntu22.04安装ROS2 0.前言一、安装ROS21.首先将本地的编码格式修改为utf-82.添加ROS2 GPG key3.安装ROS24.设置环境变量 二、简单测试1.Hello ROS!2.ROS Turtle 三、总结 0.前言 最近也没找到什么特别感兴趣的小项目,不过偶然间看见ROS2这个东西&#…

0703齐次方程-微分方程

文章目录 1 定义和解法1.1 定义1.2 微分方程中的变量替换1.3 齐次方程的解法 2 例题结语 1 定义和解法 1.1 定义 形式上可化为 d y d x g ( y x ) \frac{dy}{dx}g(\frac{y}{x}) dxdy​g(xy​)的方程,称为齐次方程。 例如 d y d x y x tan ⁡ y x , d y d x e y…

股票期货模拟交易有用吗?股票期货模拟交易心得

股票期货市场为了满足新用户的需求,有专门的股票期货模拟交易平台,大家可以在这个平台上进行股票期货的模拟交易,这样可以通过不断总结,丰富我们的知识。下面整理的股票期货模拟交易实验心得,从股票期货模拟交易与实盘…

linux jstat 简介

本文目录一览: 1、Linux使用jstat命令查看jvm的GC情况2、linux怎么监控 jvm内存 jstat3、Linux系统监控要用到哪些命令4、linux上如何安装jstatd服务 Linux使用jstat命令查看jvm的GC情况 Linux 使用jstat命令查看jvm的GC情况 命令格式 jstat命令命令格式&#…

复现永恒之蓝[MS17_010]

目录 准备靶机 测试ping连通性 攻击漏洞 利用漏洞 准备靶机 1台kali,1台win7 win7系统可以在MSDN镜像网站里获取 注:将win7安装好,win7无法安装vmtools,若升级系统,可能会把永恒之蓝补丁打上,所以建议别升级系统 测试…

【SpringCloud常见面试题】

SpringCloud常见面试题 1.微服务篇1.1.SpringCloud常见组件有哪些?1.2.Nacos的服务注册表结构是怎样的?1.3.Nacos如何支撑阿里内部数十万服务注册压力?1.4.Nacos如何避免并发读写冲突问题?1.5.Nacos与Eureka的区别有哪些&#xff…

毕业设计 医学图像阅读器 DICOM CT MRI 阅读器 三维重建 可视化编程技术及应用

一、 概述 此系统实现了常见 VTK 四视图,实现了很好的 DICOM 图像显示,可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素,距离测量,角度测量,提供源码; 并且通过三维重建实现可视化。使用…

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

**MySQL关联查询七种方式详解与应用实例**,你的掌握了吗

当我们需要从多个表中查询数据时,就需要使用关联查询了。MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。本文将讲解这七种关联查询的SQL语句、示例以及应用场景。 一、 前言 关联查询是数据库操作中…

基于html+css的图展示42

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

5.2.1二叉树的定义和基本术语

二叉树的基本概念: 二叉树是递归定义的二叉树 下面我们来看几个特殊的二叉树: 特点: 1)只有最后一层有叶子节点 2)不存在度为1的结点 3)按层序从1开始编号,结点i的左孩子为2i,右孩…

基于趋动云的chatGLM-6B模型的部署

首先根据官方示例教程,学会怎么创建项目,怎么使用数据,怎么进入开发环境,以及了解最重要的2个环境变量: 这个是进入开发环境以后的代码目录 $GEMINI_CODE 这个是引用数据集后,数据集存放的路径 $GEMINI_DA…

第十一章_SpringBoot集成Redis

总体概述 redisTemplate-jedis-lettuce-redission之间的的联系 1、redisTemplate是基于某个具体实现的再封装,比如说springBoot1.x时,具体实现是jedis;而到了springBoot2.x时,具体实现变成了lettuce。封装的好处就是隐藏了具体的…

【难学易用c++ 之 继承】

目录: 前言一、继承的概念及定义(一)概念(二)继承定义继承关系和访问限定符继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…