Дублированные документы ElasticSearch

Мы используем приложение Spring Boot для вставки/обновления эластичных поисковых документов. Наш поставщик данных отправляет нам данные через Kafka. Наше приложение обрабатывает события, пытается найти запись и вставить запись, если она не существует, или обновить, если полученная запись отличается от сохраненной. В elasticsearch не должно быть повторяющихся записей.

Приложение вставляет/обновляет документы с НЕМЕДЛЕННЫМ обновлением

Проблема: иногда нам приходится удалять все данные и загружать их снова, потому что записи дублируются. Я обнаружил, что эти клонированные записи отличаются только датой вставки. Обычно разница в несколько часов.

В целом все работает как положено, детальные интеграционные тесты на org.codelibs.elasticsearch-cluster-runner выделены зеленым цветом.

Пример метаданных эластичного поискового запроса:

{
  "docs" : [
    {
      "_index" : "reference",
      "_type" : "reference",
      "_id" : "s0z-BHIBCvxpj4TjysIf",
      "_version" : 1,
      "_seq_no" : 17315835,
      "_primary_term" : 40,
      "found" : true,
      "_source" : {
        ...
        "insertedDate" : 1589221706262,
        ...
      }
    },
    {
      "_index" : "reference",
      "_type" : "reference",
      "_id" : "jdVCBHIBXucoJmjM8emL",
      "_version" : 1,
      "_seq_no" : 17346529,
      "_primary_term" : 41,
      "found" : true,
      "_source" : {
...
        "insertedDate" : 1589209395577,
...
      }
    }
  ]
}

Тесты

  • Я много раз загружал данные в локальный экземпляр ES - дубликатов нет
  • Я создал несколько долго работающих интеграционных тестов с большим количеством вставок, обновлений, запросов на локальном экземпляре org.codelibs.elasticsearch-cluster-runner с 1-5 узлами в памяти - без дублирования.

Подробности: версия Elastic Search — соединение 7.5 ES с org.elasticsearch.client.RestHighLevelClient


person Michał Mazur    schedule 13.05.2020    source источник
comment
Рассматривали ли вы возможность использования Kafka Connect для этого? Он имеет очень хороший коннектор приемника Elasticsearch.   -  person Robin Moffatt    schedule 13.05.2020
comment
@РобинМоффат нет. Я знаю Kafka Connect и использовал его в небольших сторонних проектах. У нас есть классический ресивер Spring Boot Kafka, и он работает без сбоев.   -  person Michał Mazur    schedule 13.05.2020
comment
¯_(ツ)_/¯ на ваш выбор :-) Но FWIW Kafka Connect обработает для вас дубликаты документов   -  person Robin Moffatt    schedule 13.05.2020


Ответы (1)


Причина найдена. У одного из узлов были проблемы с установлением соединения, и он любил иногда отключаться.

person Michał Mazur    schedule 20.05.2020