paimon的四种changelog模式(1)-input模式

paimon的四种changelog模式(2)-none模式 # 结论 - changelog=node的情况下,一次操作产生一个data文件的,不会产生一个changelog文件 - changelog=node的情况下,流式读取结果是正确的,虽然不像input模式有changelog,但是paimon会记录每次操作产生的快照,根据不同版本的快照数据,经过汇总能够推断出changelog,这个changelog是每次流式处理该表时,加载到flink状态中的(内存) - 因此这个none模式的changelog实际上是不够稳定的,而且比较耗费运算资源,但是非常省存储资 阅读详情
AI摘要

本文围绕Paimon的changelog=input模式展开,介绍了环境创建、snapshot和checkpoint关系,通过插入操作、查询、CDC采集等实验,得出一次checkpoint会产生一个data和changelog文件且内容一致。指出input模式流处理需标准操作,适用于CDC采集及后期流式处理的表。

环境创建

 CREATE CATALOG fs_catalog WITH (
    'type'='paimon',
    'warehouse'='file:/data/soft/paimon/catalog'
);

USE CATALOG fs_catalog;

drop table if exists t_changelog_input;
 
 CREATE TABLE t_changelog_input (
      age BIGINT,
      money BIGINT,
      hh STRING,
      PRIMARY KEY (hh) NOT ENFORCED
)WITH (
    'merge-engine' = 'deduplicate',
    'changelog-producer' = 'lookup'
);

paimon的snapshot和checkpoint之间的关系

  • 一次snapshot会产生一个data文件
  • 一次checkpoint会产生1-2个snapshot文件,要看这次checkpoint是否触发compaction,触发了就是2个data文件(一个是合并后的数据,一个本次checkpoint写入数据),否则只有一个(本次checkpoint写入数据)
  • 流式写入根据checkpoint间隔,定期进行checkpoint
  • 批写(手动执行sql脚本)每一个sql会立即生成一次checkpoint效果

执行一次插入操作

insert into t_changelog_input values(10,1000,'1');

root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_input/bucket-0# ll
total 8
-rw-r–r-- 1 root root 1217 Nov 27 13:40 changelog-aa32a677-6df6-40fa-83bd-3b7a6d38c84a-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 13:40 data-aa32a677-6df6-40fa-83bd-3b7a6d38c84a-1.parquet

changelog文件
在这里插入图片描述

data文件
在这里插入图片描述

相同主键,再执行一次插入操作

insert into t_changelog_input values(10,2000,'1');

root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_input/bucket-0# ll
total 16
-rw-r–r-- 1 root root 1217 Nov 27 13:40 changelog-aa32a677-6df6-40fa-83bd-3b7a6d38c84a-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 13:43 changelog-abee540c-f29d-4d18-8578-2d173d43452b-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 13:40 data-aa32a677-6df6-40fa-83bd-3b7a6d38c84a-1.parquet
-rw-r–r-- 1 root root 1217 Nov 27 13:43 data-abee540c-f29d-4d18-8578-2d173d43452b-1.parquet

changelog文件
在这里插入图片描述
data文件
在这里插入图片描述

sqlclient 流式查询

-- Flink SQL
SET 'execution.runtime-mode' = 'streaming';

--设置检查点的间隔为10秒
SET 'execution.checkpointing.interval'='10 s';
set parallelism.default=1;

-- 使用changelog,展示op,操作类型
SET 'sql-client.execution.result-mode'='changelog';

-- 从当前快照开始,读取变化情况 
SELECT * FROM t_changelog_input;

在这里插入图片描述

-- 从ID=1的快照开始,读取变化情况 
SELECT * FROM t_changelog_input  /*+ OPTIONS('scan.snapshot-id' = '1') */;

在这里插入图片描述

sqlclient 批查询

Flink SQL> SET 'sql-client.execution.result-mode'='tableau';
[INFO] Execute statement succeed.

Flink SQL> SET 'execution.runtime-mode' = 'batch';
[INFO] Execute statement succeed.

Flink SQL> SELECT * FROM t_changelog_input;
+-----+-------+----+
| age | money | hh |
+-----+-------+----+
|  10 |  2000 |  1 |
+-----+-------+----+
1 row in set

Flink SQL> SELECT * FROM t_changelog_input  /*+ OPTIONS('scan.snapshot-id' = '1') */;
+-----+-------+----+
| age | money | hh |
+-----+-------+----+
|  10 |  1000 |  1 |
+-----+-------+----+
1 row in set

Flink SQL> SELECT * FROM t_changelog_input  /*+ OPTIONS('scan.snapshot-id' = '2') */;
+-----+-------+----+
| age | money | hh |
+-----+-------+----+
|  10 |  2000 |  1 |
+-----+-------+----+
1 row in set

执行cdc采集

使用方法
https://paimon.apache.org/docs/0.9/flink/cdc-ingestion/mysql-cdc/

适配情况
https://nightlies.apache.org/flink/flink-cdc-docs-release-3.1/docs/connectors/flink-sources/overview/

MYSQL数据源
https://nightlies.apache.org/flink/flink-cdc-docs-release-3.1/docs/connectors/flink-sources/mysql-cdc/

下载地址
https://repo1.maven.org/maven2/org/apache/flink/flink-sql-connector-mysql-cdc/3.1.0/flink-sql-connector-mysql-cdc-3.1.0.jar

bin/flink run \
lib/paimon-flink-action-0.9.0.jar \
mysql_sync_table \
--warehouse 'file:/data/soft/paimon/catalog' \
--database 'default' \
--table 't_changelog_input' \
--mysql_conf hostname=wsl \
--mysql_conf username=root \
--mysql_conf password=root \
--mysql_conf database-name='test' \
--mysql_conf table-name='t_changelog_input' \
--table_conf changelog-producer=input \
--table_conf sink.parallelism=1 

mysql新增一条数据,然后再修改

changelog文件,新增数据时,和data数据一样。
修改mysql数据时,paimon同步到数据后发现,changelog和data不一样了,这次是两条,而data只有一条

data文件
在这里插入图片描述
changelog文件
在这里插入图片描述
流式消费的结果也是正确的
在这里插入图片描述

结论

  • changelog=input的情况下,一次checkpoint产生一个data文件的同时,也会产生一个changelog文件
  • changelog文件内容和data文件内容完全一致
  • input 情况下,如果你的操作不完整,那么流式读取的结果也是不对的
    • 上述操作insert2次相同主键,按照主键表的逻辑,应该是会出现-D +I 或者 -U +U 的场景,但是由于input模式,不会额外的处理changelog,你insert两次,我的changelog就写两次insert,你流式读取,那我就重放我的changelog,你写的changelog不对,流处理结果也就不对了,要想对,那就需要先insert,然后delete,再insert,或者执行update操作,总之不能利用主键表根据主键更新的特性来更新数据
    • 但是批处理的结果是正确的,因为批处理不管changelog
  • changelog=input就是为流处理设计的,但是数据处理操作必须要标准,必须要有-U +U -D +I的操作,而CDC任务接到的数据就是标准的,因此他两个一般是绑定的,cdc采集任务的表,如果需要流处理消费,最好使用changelog=input

应用场景

  • 用于cdc采集的表
  • and
  • 后期要进行流式处理的表
Apache Paimon官网学习记录 paimon在官网的学习,简单记录一下其中的核心特点。 阅读详情

相关推荐

数据湖Paimon入门指南

如果用户建表时指定'merge-engine' = 'partial-update',那么就会使用部分更新表引擎,可以做到多个 Flink 流任务去更新同一张表,每条流任务只更新一张表的部分列,最终实现一行完整的数据的更新,对于需要拉宽表的业务场景,partial-update 非常适合此场景,而且构建宽表的操作也相对简单。这种方式的成本相对较高,同时官方不建议这样使用,因为下游任务在 State 中存储一份全量的数据,即每条数据以及其变更记录都需要保存在状态中。流式查询将不断产生最新的更改。

m0_57320261的博客 3078

理解 Paimon changelog producer

Chaneglog producer 的主要目的是为了在 Paimon 表上产生流读的 changelog, 所以如果只是批读的表是可以不用设置 Chaneglog producer 的.一般对于数据库如 MySQL 来说, 当执行的语句涉及数据的修改例如插入、更新、删除时,MySQL 会将这些数据变动记录在 binlog 中。相当于额外记录一份操作日志, 类似于 Paimon 中的 input changelog producer 的模式。

dsgdauigfs的博客 2019

Apache Paimon:流式数据湖存储实践与核心原理解析

数据湖架构在实时场景中常面临更新困难、小文件膨胀与读取延迟等问题,传统批式存储难以支撑流式写入与增量消费的需求。LSM-Tree 结构通过追加写入与后台合并的方式,平衡写入性能与查询效率,成为流式存储设计的核心思想。Apache Paimon 将 LSM 理念与列式文件格式结合,在 HDFS 或对象存储之上实现支持主键更新、聚合预计算和 Changelog 生成的表格式存储,为实时数仓提供统一的流批一体底座。借助 Flink 的流式计算能力,Paimon 可高效承接 CDC 数据入湖、实时宽表拼接与指标聚合

weixin_33859844的博客 305

Paimon Changelog 深度解析:一本永不丢失的“交易流水账”

想象一下你的银行账户。你关心的不仅仅是当前还剩多少钱(最新状态),更关心每一笔交易记录:什么时间存了多少钱,又在什么时间取了多少钱。当前余额:就像数据表的最新状态交易流水:就是数据表的变更日志在 Paimon 中,Changelog 就是这样一本“交易流水账”,它精确地记录了表中的数据是如何变化的:哪些行是新插入的 (+I),哪些行被删除了 (-D),哪些行被更新了(体现为先删除旧值-U,再插入新值+U为什么重要?流式读取 (CDC)

HANG.NIAN 1691

paimon实战 -- Changelog Producer到底有什么用?

其实是不适用的, 上面我们提到 None 模式的流读其实就是读取 L0的文件, 那么我们只要看 L0的文件是否包含 Key 的变更记录. 因为 write buffer 会有合并的逻辑, 所以, 对于 CDC 的数据, L0中可能会是已经在内存合并后的数据. 比如同一个 key 的-U 和+U 消息, 同时写入, 那么在 writer buffer 写入的时候就已经只保留+U 消息了, 所以 None 模式中 L0文件中的数据, 可能已经是合并后的数据, 对于 CDC 的数据也不适用.

阿华田的博客 1761

数据湖Paimon 1.4.2 从理论到实践 —— 第 6 章 表存储模式与 Changelog Producer

Paimon 1.4.2 支持 MOR、COW、MOW 三种主键表存储模式,分别适用于写入密集、读多写少及读写均衡场景。MOW 模式通过 Deletion Vector 实现高效查询与良好写入性能,推荐用于实时查询表。Changelog Producer 提供四种模式:none(默认)、input(低延迟)、lookup(完整变更)、full-compaction(高一致性),根据下游需求选择,lookup 模式兼顾完整性与实时性,是主流推荐方案。

大数据架构师,深耕车联网实时数仓。专注 Flink / Paimon / Doris 流批一体、CDC 同步与实时 AI 推理,把生产里的架构选型、作业实战和故障排查整理成 4 个连载系列,只写实测跑得通的方案,欢迎私信交流。 19

paimon中的主键表与append-only 以与merge-engine 和 changelog-producer 关系

在 Apache Paimon 中,是两种核心表类型,其行为与。

chbxw 2050

Apache Paimon 数据出仓源码导读(二):Paimon Changelog 到底输出什么?+I、-U、+U、-D 与 Changelog Producer

同一条 MySQL UPDATE,为什么有时输出 +I,有时是 -D/+I,还有时是 -U/+U?本文结合 Apache Paimon 1.4.2 源码,从 RowKind、Changelog Producer、Changelog 文件与 Flink Normalize 入手,讲清 none、input、lookup、full-compaction 的输出差异、实现原因和运维取舍。

随便写写,记录一些生活、想法和偶尔冒出的念头。 393

Paimon的Changelog Producer到底有什么用?

很早以前我在一篇文章中提到流批落地的方案,其中之一就是在存储引擎上实现流批的能力。可以说Paimon的Changelog能力是Paimon能够成为流批框架落地最佳选型的核心因素之一。Paimon本身提供了4种Changelog生成方式。他们有什么不同?目的Chaneglog producer 的主要目的是为了在 Paimon 表上产生流读的 changelog, 所以如果只是批读的表是可以不用设置...

微信搜:import_bigdata,大数据领域硬核原创作者 1754

基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 3 章 Paimon 1.4 湖仓底座与 Catalog 配置

本章基于车联网TSP真实生产场景,详解Paimon 1.4湖仓底座配置。通过Hive Metastore Catalog实现与存量数仓共用元数据与权限体系,保障兼容性与运维统一;确立主键、分区、桶等核心参数(如bucket=6、primary-key=vin,collect_time,dt),确保流批一体更新能力与并行性能;明确changelog-producer选型及连接器jar加载位置,规避Catalog创建失败风险。所有配置均经生产验证,为后续流批作业奠定坚实基础。

大数据架构师,深耕车联网实时数仓。专注 Flink / Paimon / Doris 流批一体、CDC 同步与实时 AI 推理,把生产里的架构选型、作业实战和故障排查整理成 4 个连载系列,只写实测跑得通的方案,欢迎私信交流。 108

Apache Paimon 数据出仓源码导读(三):Paimon 出仓到 MySQL:UPSERT、DELETE 与幂等恢复

本文从源码拆解 Paimon 出仓到 MySQL 的完整写入链路,讲清 Flink JDBC Sink 是逐条接收、按子任务攒批,再通过 UPSERT 与 DELETE 批量执行;同时分析 Checkpoint 重放、主键幂等、跨批短暂空窗及无状态重跑的边界。

随便写写,记录一些生活、想法和偶尔冒出的念头。 469

Paimon系列:主键表流读之changelog producer

在上一篇《主键表之合并引擎merge-engine》中的结尾,当 'merge-engine' = 'first-row',开启流读的时候,会抛一下错误,提示要使用 lookup 或 full-campaction 这两种 changelog producer 才支持流读,input 模式也支持,但是只会返回输入的记录。changelog producer的作用。

2502_92343817的博客 870

Apache Paimon 数据出仓源码导读(四):从零跑通 Paimon 到 MySQL:环境、建表与第一条数据

上一篇,我们从源码角度总览了 Paimon 出仓到 MySQL 时的 UPSERT、DELETE、批量写入和故障重放。不过,如果还没有亲手跑过这条链路,一上来就看RowKind和 Checkpoint,很容易把几个层次混在一起。所以从这一篇开始,我们暂时放慢速度,把“Paimon 出仓到 MySQL”拆成几篇独立文章。这一篇只完成一件事:从零搭好一条最小链路,亲眼看到 Paimon 中的一条订单在 MySQL 中新增、更新和删除。先不追每一个源码调用,也先不讨论失败重放。

随便写写,记录一些生活、想法和偶尔冒出的念头。 329

Paimon changelog-producer 与 merge-engine

Paimon表的changelog-producer用于生成数据变更日志,支持四种模式:None、Input、Lookup和full-compaction。None模式不存储额外数据,适用于批处理场景;Input模式直接传递输入消息,适合数据库binlog场景;Lookup模式查找旧值生成完整变更日志,适合有计算逻辑的表;full-compaction模式在完全合并文件时生成变更日志,代价较高。不同模式根据业务需求选择,以平衡时效性和资源开销。

qq_15138049的博客 476

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2087

从硬件异常到代码救赎:RH850内存访问错误(MAE)的深层诊断与艺术

本文深入探讨瑞萨RH850微控制器的内存访问错误(MAE)诊断与解决方法。针对程序跑飞和Flash Driver交互中的潜在陷阱,提供系统性硬件异常分析框架和防御性编程实践,帮助嵌入式开发者从底层机制到代码层面有效预防和修复MAE问题,提升系统稳定性。

pytorch8learner的博客 197

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1)

理解 Paimon changelog producer,理解主键表的几种引擎

qq_44665283的博客 2688

Android OTA 升级实战指南:从原理到实现

本文详细解析了Android OTA升级的原理与实现方法,包括AB升级与Recovery升级的机制对比、OTA升级包制作流程以及应用层升级功能的实现。通过实战案例和常见问题排查指南,帮助开发者掌握Android系统无线升级技术,提升设备维护效率。

weixin_42652674的博客 200

Paimon 表里明明是 80 元,下游为何算成 180?Checkpoint 成功不等于变更完整

Paimon 表里的最终值正确,只证明状态存对了;下游能不能算对,还取决于变化过程有没有被完整表达。

weixin_42426485的博客 309

SECS/GEM EAP 设备自动化功能原理和设计方案

半导体SECS GEMEAP实现了对生产线上机台的实时监控,是工厂自动化不可缺少的控制系统。EAP系统与FAB中的机台紧密相关,系统的设计与开发必须与生产线的机台实际生产流程相一致,才能达到控制机台生产的目的。 EAP SECS/GEM是MES与设备的桥梁,EAP通过SECS国际标准协议与机台进行数据传输。SECS是半导体设备(半导体行业称设备为机台)必须遵循的一种国际通信协议。EAP就是通过SECS与设备通信、传输数据、发送指令控制设备按照预先定义........

semisecs 17万+

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 933

关于数据湖 Paimon,万字长文带你快速入门(上)

For fields.<field-name>.sequence-group, valid comparative data types include: DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, and TIMESTAMP_LTZ. sequence-group支持以上这些类型。当 n=1 的时候,对生成 changelog 的延迟没有特别大的影响。

云祁QI 1159

Python 爬虫实战:于好大夫在线抓取医生评价数据,选择优质医疗服务

requests:用于发送 HTTP 请求,获取网页内容。或 lxml:用于解析 HTML 页面,提取目标数据。pandas:用于数据清洗和分析。matplotlib和seaborn:用于数据可视化。time:用于控制爬取速度,避免对服务器造成压力。通过本项目,我们实现了以下目标:使用 Python 爬虫抓取好大夫在线的医生评价数据。对数据进行清洗和分析,找出评价中的关键词和趋势。根据分析结果推荐优质医疗服务。

u014481728的博客 3414

别再说 Paimon 只是表格式,真正值钱的是让更新进入数据湖

Paimon 不是普通 Parquet 目录加元数据。Primary Key Table 在 Bucket 内用 LSM 把随机更新转成有序追加,由 Merge Engine 得到当前状态,再通过原子 Snapshot 统一批读与流读边界。代价是 Compaction、Bucket、Changelog 和 Snapshot 生命周期必须治理,它也不替代 OLTP 与在线查询数据库。

weixin_42426485的博客 585

淋巴结病理数字玻片读取与处理代码

Whole-slide images are generally stored in a multi-resolution pyramid structure. 首先安装openslide模块 pip install openslide-python import os.path as osp import openslide from pathlib import Path...

猫头军师兵书 1276

31.华为路由器:PPPOE配置模拟实验及NAT配置

实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 The number of interface

迷逝 8118
上一篇: hadoop+wsl 10.255.255.254,BlockMissingException: Could not obtain block: 踩坑
下一篇: paimon的四种changelog模式(2)-none模式
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值