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条)