记flink sql cdc消费kafka数据,sink到pg表数据漏数原因排查

记flink sql cdc消费kafka数据,sink到pg表数据漏数原因排查,第1张

记flink sql cdc消费kafka数据,sink到pg表数据漏数原因排查 记flink sql cdc消费kafka数据,sink到pg表数据漏数排查[原因分析]

flink sql

insert into t3
select 
	cast(t1.a as varchar(100)) || cast(t1.b as varchar(100)) as id,  -- 组合主键id
	t1.a
	,t1.b
	,t2.c
	,sum(d)
from t1
join t2 on t2.id = t1.id
group by t1.a,t1.b,t2.c

现象与环境描述

1、flink 版本:1.12.2 、1.13.2
2、debezium 采集pg数据到kafka , flink 读取kafk数据[模式:upsert-kafka]
3、任务并行度为1 

问题描述

1、sink 到 pg 表 , pg 表某些id数据丢失
2、t2.c 字段值发生变更;如:'aa' 变更为 'bb' 
3、sink 到 kafka 分区不不变[可能会分发到其他分区,需要验证flink sink 到kafka的数据分发逻辑是按照group by 还是按照主键字段分发分区] , 大佬们知道的也可以在评论下方讲解一下哈

问题验证步骤如下

1、增加 sink 到kafka , 用来与sink到pg做对比
2、在更新t2.c字段值前,kafka 存在一条记录,假设offset是100, 分区为1 
3、更新t2.c字段值后,kafka 接收到 一条 insert 和 null 的数据,假设offset分别是:101,102 , 分区 1
kafka上数据看下图

根据以上三点可以判断修改t2.c字段值会导致数据乱序, pg 表先进行insert 再 delete ,进而使update对应的记录回撤[delete] , 而不是先delete再insert ,如此就导致了pg表漏数

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5676365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存