当两个进程同时写入时如何解决同一密钥上的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