当两个进程同时写入时如何解决同一密钥上的ElasticSearch冲突

我有多个进程同时将数据写入ES,而且两个进程可能同时写入具有不同值的相同密钥,这导致了以下异常:

"error" : "VersionConflictEngineException[[website][2] [blog][1]:

version conflict, current [2], provided [1]]",

"status" : 409

请问我该如何解决以上问题,因为我必须保留多个流程。

回答:

VersionConflictEngineException引发以防止数据丢失。_version更改文档时,elasticsearch中的每个文档都有一个递增的数字。

当您从ES查询文档时,响应中还会包含该文档的版本。当您更新相同的文档并提供版本时,索引中应该已经存在具有相同版本的文档。

如果当前版本大于更新请求中的版本,那么我们现在将获得冲突,HTTP错误代码为409, VersionConflictEngineException

在当前情况下,

版本冲突,当前2,提供了1

ES中的当前版本为2,而您的请求中的当前版本为1,这意味着某个其他线程已经修改了该文档,而您的更改正在尝试覆盖该文档。

如果是VersionConflictEngineException,则应重新获取文档并尝试使用最新的更新版本进行更新。

是否使用版本控制 /

乐观并发控制,取决于应用程序。如果您可以忍受数据丢失,则可以避免在更新请求中传递版本。

以上是 当两个进程同时写入时如何解决同一密钥上的ElasticSearch冲突 的全部内容, 来源链接: utcz.com/qa/408724.html

回到顶部