Flink Doris Connector数据同步,UNIQUE KEY(id, accounting_period) 模型,数据同步后出现相同的id

Viewed 28

flink版本1.20.0,doris版本3.0.3

/etc/docker/flink-1.20.0/bin/flink run
-Dexecution.checkpointing.interval=10s
-Dparallelism.default=1
-c org.apache.doris.flink.tools.cdc.CdcTools
/etc/docker/flink-1.20.0/lib/flink-doris-connector-1.20-24.1.0.jar
mysql-sync-database
--database jsy_finance
--job-name vc_voucher
--mysql-conf hostname=192.168.200.81
--mysql-conf port=3306
--mysql-conf username=root
--mysql-conf password=root
--mysql-conf database-name=doristtest
--mysql-conf server-time-zone=Asia/Shanghai
--including-tables "vc_voucher"
--sink-conf fenodes=192.168.200.125:8030
--sink-conf username=root
--sink-conf password=root
--sink-conf jdbc-url=jdbc:mysql://192.168.200.125:9030
--sink-conf sink.label-prefix=label
--sink-conf primary-key=id,accounting_period
--sink-conf upsert=true
--table-conf replication_num=1
数据同步后出现id重复的记录,我可以100%确定vc_voucher表中id和accounting_period的组合是唯一的,flink版本1.20.0,doris版本3.0.3

2 Answers

Unique 表,id和accounting_period作为 联合 KEY 键。如果id 重复是符合预期的吧?
id和accounting_period 重复不符合预期,是哪种情况呢?

image.png

原表是id为主键,数据同步到doris时需要以accounting_period进行分区,所以Unique(id, accounting_period),预期是id唯一,同步后的数据样板如下:
image.png
Stream load 导入使用的 label 前缀。2pc 场景下要求全局唯一,用来保证 Flink 的 EOS 语义,是不是因为--sink-conf sink.label-prefix=label设置成了固定值,flink任务重启后有影响