超凡 Blog

Follow your instincts and do what you think is right!

Paimon 与 Flink / Spark 提交语义

两阶段提交、checkpoint 与 snapshot,以及 failover 后的重复写

CDC 入湖要不要 exactly-once,往往在评审里被写成一句「用 Paimon + Flink 两阶段提交」。真上线后,问题会变得很具体:checkpoint 成功是否等于 snapshot 可见?Spark 批写挂了重跑会不会双写?failover 之后重复写入的行,到底靠谁吞掉?支付对账一旦对不上,这些语义细节就会从「架构图上的对勾」变成事故单里的根因栏。 本文以支付成功明细 ...

Paimon Bucket、分区与文件布局

bucket-key、动态桶、裁剪与热点店铺倾斜

支付明细与订单事实表入湖之后,性能问题很少第一时间出在「Paimon 会不会算错 upsert」,而更常出在布局:分区切太粗导致每次对账扫半天;bucket 数拍脑袋导致小文件爆炸;或者某个头部店铺把单 bucket 撑到几十 GB,compaction 追不上,Lookup 变慢。业务表现是「大促后延迟」或「热点商户查询超时」,根因往往在 partition / bucket / 文件目录...

Paimon 读写路径与并发控制

Snapshot isolation、commit 冲突与重试怎么落到源码路径

订单域 CDC 入湖之后,最常见的线上事故不是「表结构配错了」,而是两个作业同时往同一张主键表里写,偶发 commit 失败、重试后 snapshot 跳号,或者读侧短暂读到「少了一截」的数据。业务方会说「支付明细对不上」,工程侧最后往往要回到同一条链:FileStoreWrite 怎么落文件、FileStoreCommit 怎么抢 snapshot、SnapshotReader 怎么钉住 ...

Paimon 主键表 LSM 与合并机制

changelog-producer、compaction 与 sequence 裁决

上一篇把 Snapshot / Manifest / Data File 骨架理清了。支付和订单 CDC 入湖真正吃资源的地方,往往不在「能不能提交」,而在 主键表如何把同 key 的多版本收成一张可读视图,以及 compaction 如何一边归并文件一边(按模式)产出 changelog。线上最常见的两类痛:小文件把 NameNode 或对象存储 LIST 拖垮;compaction 把 ...

Paimon 整体架构与表格式设计

Snapshot、Manifest 与 Data File 怎么串起来

订单域和支付域做完 MySQL 到湖的链路之后,业务侧最常追问两句:「此刻湖里看到的是不是和源库同一时刻的一致性视图?」以及「对账差了几万行,能不能回滚到十分钟前再重算?」在 Paimon 里,这两类问题几乎都落在同一套元数据链路上:Snapshot → Manifest List → Manifest File → Data File。把这条链路吃透,后面谈主键表 LSM、Bucket、两...

Spark 数据倾斜

批处理里一次 join 倾斜的定位与处理

Spark 批任务跑到 99% 卡住,剩下几条 task 遥遥无期——这基本是倾斜的经典画面。概念上都知道「key 不均匀」,落地时要分清:是 join 倾斜、聚合倾斜,还是 读入分区本身不均。处理手段不一样。 下面是一次订单明细关联店铺维表的案例。 案例背景 任务目标:T+1 明细表关联店铺维度,产出宽表。 SELECT /*+ BROADCAST(d) */ -- 起初以为维表...

Agent 与数据运维

用在排障和日常操作上的几个真实场景

最近团队里开始把 Agent 接进数据开发和运维流程。不是替代值班,而是把一些重复、可检索、规则清晰的活先丢给它。下面几个场景都是已经跑过的,附带边界:哪些能交给 Agent,哪些必须人拍板。 场景一:Flink 任务延迟告警的第一轮分流 以前的流程:电话响 → 打开 WebUI → 看 Lag、Checkpoint、BackPressure → 翻最近发布记录。熟练的人 10 分钟能定...

Flink CDC 与 binlog

一次 MySQL binlog 文件块损坏的故障复盘

Flink CDC 读 MySQL,底层跟的是 binlog。多数时候问题出在权限、GTID、表结构变更,真正碰到 binlog 文件块损坏 的次数不多,但一旦碰上,作业会反复失败,位点卡住,下游湖表停更。 这篇记录一次从报错到恢复的过程,方便以后对照。 案例现象 任务:Flink CDC 同步订单库 order_* 若干表到 Paimon 主键表,并行度 4,scan.startup...

Kafka 消费一致性

重复消费、丢数和「看起来对不上」

Kafka 本身提供的是「分区内有序 + at-least-once / exactly-once 语义可组合」的能力,不等于业务表一定不重不丢。线上最常见的投诉是两句:数多了 和 数少了。多半不是 Broker 丢了消息,而是消费位点、事务、幂等、下游写入这几层没对齐。 这篇用一次对账任务把几类一致性问题串起来讲。 案例背景 有一条链路: 业务库事务提交 -> 变更投递...

Flink 背压

一次订单宽表任务的排查与治理

背压在 Flink 里不算罕见。WebUI 上一片红色,Lag 往上爬,Checkpoint 越来越慢,最后要么超时失败,要么结果延迟到业务受不了。概念大家都会说「下游处理不过来,向上游反压」,真正耗时间的是:谁在拖、为什么拖、能不能用局部手段扛住。 下面用一次真实一点的订单宽表任务,把排查路径和改法写清楚。 案例背景 任务大致链路: Kafka(order_event) -&...