afterBulk() метод

Здравствуйте, подскажите, пожалуйста, с таким вопросом. Я индексирую документы с помощью BulkProcessor. У меня такой user case:

"An application has critical data and might decide to stop passing requests to bulk processor until the Elasticsearch cluster is up again."

Я нашла, что можно добавить в afterBulk() метод request.waitForActiveShards(). Но я неуверенна, достаточно ли этого. Спасибо и мой метод:

@Override
public void afterBulk(long executionId,
BulkRequest request,
Throwable failure) {
logger.warn("There is a problem with the burk request", failure);
request.waitForActiveShards();
}

I moved your question

Где вы это нашли?

В методах, которые можно вызывать на объекте request. Теперь понимаю, что это неправильно. Остановилась на следующем, что в методе afterBulk() добавляю request: bulkProcessor.add(request). А потом уже в своей программе жду долго, а потом закрываю bulkProcessor. Но как остановить добавление документов в bulkProcessor не знаю, если в предыдущем bulk возникает ошибка.

Ну так вопрос в том, от чего возникла эта ошибка. Если она произошла потому, что сервер перегружен, то BulkProcessor эти ошибки перехватывает и реагирует в соответствии с BackoffPolicy. Если индекс не доступен, то запрос на индексирование будет ждать пока праймари не появится или свалиться по таймауту. Во всех остальных, ошибка скорее всего возникла из-за того, что проблема с самой записью. То есть добавляет ее снова и снова не имеет смысла.

Спасибо. По-моему ошибка возникла из-за java.lang.OutOfMemoryError: Java heap space. Поэтому индекс был недоступен. Попробую дать es больше памяти. Я правильно поняла, что я в afterBurk() могу поймать ошибки. А "to stop passing requests to bulk processor until the Elasticsearch cluster is up again" не получится.

Теоретически, можно запрашивать state индекса время от времени и перестать добавлять новые записи в BulkProcessor до тех пор, пока индекс не позеленеет. Вопрос в том, где эти записи в это время держать? Если у вас есть очередь какая-нибудь перед elasticsearch, то можно держать из в это очереди, туда же можно добавить записи из afterBulk, если вы уверены, что имеет смысл их еще раз попытаться проиндексировать.

Спасибо.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.