Stream Load 导入 报failed to call frontend service 但数据其实成功导入了

{
“TxnId”: 556090,
“Label”: “1657642049225”,
“Status”: “Fail”,
“Message”: “failed to call frontend service”,
“NumberTotalRows”: 1241,
“NumberLoadedRows”: 1241,
“NumberFilteredRows”: 0,
“NumberUnselectedRows”: 0,
“LoadBytes”: 384806,
“LoadTimeMs”: 24169,
“BeginTxnTimeMs”: 0,
“StreamLoadPutTimeMs”: 2,
“ReadDataTimeMs”: 0,
“WriteDataTimeMs”: 2696,
“CommitAndPublishTimeMs”: 0
}

{
“TxnId”: 556092,
“Label”: “1657642087426”,
“Status”: “Success”,
“Message”: “OK”,
“NumberTotalRows”: 1241,
“NumberLoadedRows”: 1241,
“NumberFilteredRows”: 0,
“NumberUnselectedRows”: 0,
“LoadBytes”: 384806,
“LoadTimeMs”: 1147,
“BeginTxnTimeMs”: 0,
“StreamLoadPutTimeMs”: 2,
“ReadDataTimeMs”: 0,
“WriteDataTimeMs”: 936,
“CommitAndPublishTimeMs”: 207
}
两次streamload导入返回信息,第一次虽然报failed to call frontend service但是其实数据导入成功
sr版本2.2.2
这个问题在2.0.0版本就出现过
我的streamload对单表导入频率为15s一次
无法稳定复现 但是偶发频率较高 基本上一周会出现几次

请问label是如何命名的,内部的话可以用label做唯一标识,同一label如果fail了可以复用,成功了不能重复写入,我看您的label都不一样,是同一批数据么,怀疑是同一数据因为某些原因产生不同label同时写入成功了?建议用label去规划下任务尼,做数据的唯一标识

之前确实是同一批数据重试的时候会用相同的label

但是出现了 导入失败 重试的时候 label相同 无法再次导入 当时的sr版本还是2.0.0

而由于重试失败导致的数据丢失是我们目前无法容忍的 所以改为不同label 但是重试可以成功 即使多了数据也要比丢了数据强

我想确认下 导入都提示失败了 为什么还会导入成功 我们是不是应该先从这个导入失败 但是导入成功 这个问题的角度来看这个问题如何解决

期待您的回复 我的的确确 在一批数据导入失败后 重试使用相同的label 但是返回提示label已存在类似的字眼 所以轻易不敢尝试 再使用相同的label 因为生产无法承担这样丢失数据带来的问题

导入fail的数据是不会落库的,我上面的意思是说加入有1亿数据,分10次导入,每次1000w用不同的label,但是有其中1kw导入失败时,比如1-1kw数据,此时label为001,重试的时候还是复用001,这样的话能保证这1kw数据没有重复写入,提示label已存在是否我们固定使用了同一个label?这里是有任务已经导入成功了并使用了该label。

我们可以先不说label的问题
我现在遇到的情况就是导入fail的时候数据落库了
版本是sr2.2.2

因为导入fail了 所以我进行了重试 重试第一遍成功了 然后发现导入了两次1241条数据

可以调大txn_commit_rpc_timeout_ms=30000 观察一下

是用相同的label重试的吗,如果出现label相同,会返回事务状态,如果是Committed说明之前的导入已经成功了。

好的 谢谢 我这就改一下试试

使用的不同的label进行重试的

需要使用相同的label重试,可以通过返回的信息判断之前的导入是否成功。

你看下这个

如果报错可以用相同的label重试,不要使用新的label

感觉可能是我描述的不太清楚导致你们没懂
我拒绝使用相同的label!
因为我在sr2.0.0 因为重试使用相同的label丢过数据

当时的情形是这样子的
第一次导入失败
第二次导入重试 使用相同的label 返回该label已存在(类似的话)
然后数据丢了一段

在我知道这种情况可能会出问题的情况下 我就不可能在轻易尝试了 担不起那个责任,可惜的是当时的时间过去太久远了 日志也没留下

我在测试环境再搭建一套导入的环境 再试试

返回label已存在时需要判断ExistingJobStatus的状态:
如果为RUNNING,说明之前的导入没有完成,这个时候可以使用新的label重试。
如果为FINISHED,说明之前的导入已经完成,这个时候可以继续接下来的导入。
使用这种方式可以保证exactly once,如果直接使用新的label,只能保证at least once。

老哥, txn_commit_rpc_timeout_ms=30000 有效果吗