Появилась проблема связанная с изменением типа поля, что вызывало такую запись в логе Logstash и отбрасывание документа:
"status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse field [header.HTTP_CM_DEVICE_TIME] of type [date] in document with id 'AWSk_3IBRp2XS7BSwTDG'. Preview of field's value: '2020-06-29T1:34:45.661+03:00'"
Проблема эта известная, и она на нашей стороне. разработчики поменяли тип поля, теперь документ не индексируется и отбрасывается целиком. Чтобы этого не происходило, рекомендуется поставить для поля тип которого нельзя контролировать:
"ignore_malformed": true
Но вопрос в другом. Есть и нормальные документы с нормальным значением - которые не отбрасываются, а индексируются.
То есть проблемное поле есть только у примерно 50% документов.
Но ввиду того что прилетает много документов с указанной выше ошибкой - индексация нормальных и несбойных документов замедлилась на час и даже больше.
Очень интересно было бы узнать почему происходит такое замедление индексирования ввиду отбрасываемых по причине сбойного поля документов?
И второй вопрос: как это побороть? Стоит ли делать несколько машин с Logstash и ставить их всех в одинаковый group_id, подключая все к одному и тому же топику kafka и с output в один и тот же индекс elasticsearch? Есть ли в таком случае вероятность дупликации данных?
почему происходит такое замедление индексирования ввиду отбрасываемых по причине сбойного поля документов?
Неправильный формат обрабатывается с помощью механизма exception (исключений). И в java он был разработан.... для исключительных ситуаций. На создание exception требуется больше времении, чем на индексацию небольшого документа - поэтому и замедление.
И второй вопрос: как это побороть?
Добавить в logstash проверку на неправильное поле и удалить это поле перед посылкой записи в elasticsearch.
Спасибо за ответы, Игорь! Прошу прощения за свою навязчивость - но уже если этого не избежать и всегда происходит внезапно (маппинг уже пишется постфактум, да и под многие поля вообще не пишется) - поможет ли три логстеша на трех разных нодах с одним group_id (будут забирать из одного топика кафки) которые будут писать в один индекс - ускорить индексирование нормальных документов, если рядом идет много отбрасываемых?
Вы всегда можете это избежать, поставив dynamic в false. Тогда внезапные новые поля просто не будут индексироваться.
Не знаю, надо смотреть на нагрузку. Я не уверен, что проблема в логстеше (или только в логстеше), и, даже если Вам удасться его правильно настроить, я не знаю, разрешите-ли вы эту проблему или просто переместите ее на elasticsearch. От ошибок нагрузка нарастает и там и там. Elasticsearch тратит время на формирование сообщения и logstash на его обработку. Кстати, вы dead_letter_queue на logstash случайно не включили?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.