记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表漏数

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值