Comment réparer ElasticSearch conflits sur la même touche lorsque deux processus d'écriture en même temps
J'ai plusieurs processus de l'écriture de données en ES au même moment, deux processus peut écrire la même clé avec des valeurs différentes en même temps, il a provoqué l'exception de la manière suivante:
"error" : "VersionConflictEngineException[[website][2] [blog][1]:
version conflict, current [2], provided [1]]",
"status" : 409
Comment pourrais-je résoudre le problème ci-dessus s'il vous plaît, car j'ai garder plusieurs processus.
- Je suppose que vous avez essayé la solution la plus évidente de faire un get par id juste avant d'insérer ou de mettre à jour ?
Vous devez vous connecter pour publier un commentaire.
VersionConflictEngineException
est jeté pour éviter la perte de données. Chaque document dans elasticsearch a un_version
numéro est incrémenté chaque fois qu'un document est modifié.Lorsque vous interrogez un doc de ES, la réponse inclut également la version de la doc. Lorsque vous mettez à jour la même doc et de fournir une version, puis un document avec la même version est censée être déjà existants dans l'index.
Si la version actuelle est plus grande que celle de la demande de mise à jour, Ce que nous maintenant, c'est un conflit, avec le code d'erreur HTTP de 409 et
VersionConflictEngineException
Dans votre scénario actuel,
La version actuelle dans ES est de 2 alors que dans votre demande est 1, ce qui signifie un autre thread a déjà modifié la doc et votre changement est en train d'essayer d'écraser le doc.
En cas de VersionConflictEngineException, vous devez re-chercher de la doc et essayer de mettre à jour à nouveau avec la dernière version mise à jour.
De savoir si ou de ne pas utiliser le gestion des versions /Contrôle D'Accès Concurrentiel Optimiste, dépend de l'application. Si vous pouvez vivre avec la perte de données, vous pouvez éviter de passer de la version de la demande de mise à jour.