怎么又是你

seqNo新建文档时值特别大,且并发修改时大量VersionConflicEngineException

Elasticsearch | 作者 SnowFlakeLeaf | 发布于2023年06月16日 | 阅读数:2600

请教各位,7.10版本下,我们线上即时是的if_seq_no的值都特别大,并且并发修改有大量的VersionConflicEngineException异常提示传入的seqNo和现有的不符。我们在请求中并未附带if_seq_no和if_primary_term,请问if_seq_no的值是es的server端自生成的吗?这个生成规则又是什么呢,源码里可能是我找错地方了一直没有看到这一点是在哪生成的,只发现Index和Update时会先查一次现有的seqNo值,感激不尽
已邀请:

Charele - Cisco4321

赞同来自: charlesfang SnowFlakeLeaf

_seq_no是针对分片(就是说每个主分片都有这么一个计数据,副分片的值随主分片)的,
作为这个分片上一个操作的唯一序列号
 每次分片上有增加或修改或删除操作时,都会 +1,
这个_seq_no值记入对应的文档,所以你在GET时会看到

111.png

 
VersionConflicEngineException和_version,_seq_no,_primary_term都有关系,
贴出报错才有可能知道原因在哪 
 
 
 

Charele - Cisco4321

赞同来自: SnowFlakeLeaf

很多情况都有会VersionConflicEngineException,
你应该贴出完整的报错栈才能看出是什么问题
 
其中一个原因就是跟“版本值”有关,文档变动前会找出这个文档对应的版本,
和版本中的数值比较,如果不同,就会报错
111.png

 

要回复问题请先登录注册