tispark并发写入tikv导致的索引不一致bug

Bug 反馈
清晰准确地描述您发现的问题,提供任何可能复现问题的步骤有助于研发同学及时处理问题
【 Bug 的影响】
多executor同时写入tikv,并且数据中有重复数据,写入tikv,不管replace=true或false,都会发生索引不一致问题

【可能的问题复现步骤】
建表语句:
CREATE TABLE test_index (
id VARCHAR(40) NOT NULL,
doc_id VARCHAR(40) DEFAULT NULL,
process_end_time DATETIME DEFAULT NULL,
PRIMARY KEY (id),
KEY doc_id (doc_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

测试数据,有301条相同数据:
test-data.parquet (295.6 KB)

tispark直接读取该数据,repartition指定分区后同时写入:
spark.read.parquet(input).repartition(part.toInt)
.write.format(“tidb”)
.option(“replace”, “true”)
.option(“tidb.user”, “xx”).option(“tidb.password”, “xx”)
.option(“database”, “xx”).option(“table”, “xx”)
.mode(“append”).save()

提交参数:
/services/spark-2.4.3/bin/spark-submit --master yarn
–deploy-mode cluster
–executor-memory 1G
–executor-cores 1
–num-executors 4
–name TestIndex
–conf spark.yarn.maxAppAttempts=1
–class com.xxx.TestIndex
–jars tispark-assembly-2.3.14-SNAPSHOT.jar
xx.jar 4

最后一个参数是要分区数,如果分区为4个,起4个executor来写入,则写入后出现该bug:

如果同样是分区是4个,但是给1个executor、4个cores,就不会出现该问题

【看到的非预期行为】

【期望看到的行为】

【相关组件及具体版本】
tidb 4.0.13和5.0.2均有此问题,tispark: 2.3.14

分析中,有进展会尽快答复

好的谢谢

嗨大佬,请问你们复现出来了吗,有结论吗

https://github.com/pingcap/tispark/pull/2085 有一个 PR 还在测试中,多谢。