我有多个进程同时向ES写入数据,而且两个进程可能同时写入具有不同值的相同键,这导致了如下异常:
"error" : "VersionConflictEngineException[[website][2] [blog][1]:
version conflict, current [2], provided [1]]",
"status" : 409
我该如何解决上述问题,因为我必须保留多个进程。
VersionConflictEngineException
抛出以防止数据丢失。 elasticsearch 中的每个文档都有一个_version
每当文档更改时,该数字就会增加。
当您从 ES 查询文档时,响应还包括该文档的版本。当您更新同一文档并提供版本时,具有相同版本的文档预计已存在于索引中。
如果当前版本大于更新请求中的版本,我们现在会得到冲突,HTTP 错误代码为 409 和VersionConflictEngineException
在您当前的情况下,
版本冲突,当前2 https://www.elastic.co/guide/en/elasticsearch/guide/current/optimistic-concurrency-control.html, 假如1 https://www.elastic.co/blog/versioning
ES 中的当前版本是 2,而您的请求中的当前版本是 1,这意味着其他线程已经修改了文档,并且您的更改正在尝试覆盖文档。
如果出现 VersionConflict EngineException,您应该重新获取文档并尝试使用最新的更新版本再次更新。
是否使用版本控制 https://www.elastic.co/blog/versioning / 乐观并发控制 https://www.elastic.co/guide/en/elasticsearch/guide/current/optimistic-concurrency-control.html,取决于应用。如果您可以忍受数据丢失,则可以避免在更新请求中传递版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)