How to fix ElasticSearch conflicts on the same key when two process writing at the same time

Viewed 67602

I have multiple processes to write data to ES at the same time, also two processes may write the same key with different values at the same time, it caused the exception as following:

"error" : "VersionConflictEngineException[[website][2] [blog][1]:
             version conflict, current [2], provided [1]]",
"status" : 409

How could I fix the above problem please, since I have to keep multiple processes.

4 Answers

The ES provides the ability to use the retry_on_conflict query parameter.

Specify how many times should the operation be retried when a conflict occurs. Default: 0.

If you have several parallel scripts that can simultaneously work with the same document, you can use this parameter.

For example: You have an index for tweets. And 5 processes that will work with this index. It is possible that all 5 scripts will work with the same document (some tweet). In this case, you can use the ...&retry_on_conflict=6 parameter. Why 6? 5 processes + 1 (plus some legroom). Thus, the ES will try to re-update the document up to 6 times if conflicts occur.

You could also plan for this by using the elastic search external versioning system and maintain the document versions manually as stated below

enter image description here

I had this problem, and the reason was that I was running the consumer (the app) on a terminal command, and at the same time I was also running the consumer (the app) on the debugger, so the running code was trying to execute an elasticsearch query two times simultaneously and the conflict was occurred. So I terminated one of them (the debugger) and executed the code only on my terminal and the error was gone. So, make sure you are not running the code from more than one instance.

Related