Я сравниваю ElasticSearch с очень высокой пропускной способностью индексации.ElasticSearch - высокая пропускная способность индексации
Моя текущая цель - иметь возможность индексировать 3 миллиарда (3 000 000 000) документов в считанные часы. Для этой цели у меня в настоящее время есть 3 серверных сервера Windows с 16 ГБ оперативной памяти и 8 процессоров каждый. Вставляемые документы имеют очень простое отображение, содержащее только несколько числовых непроанализированных полей (_all
отключено).
Я могу достичь примерно 120 000 запросов индекса в секунду (мониторинг с использованием большого стола), используя эту относительно скромную установку, и я уверен, что пропускная способность может быть увеличена дальше. Я использую несколько клиентов .net NEST для отправки массовых запросов индекса, при этом 1500 операций индексации навалом.
К сожалению, пропускная способность 120 тыс. Запросов в секунду не длится очень долго, и скорость постепенно уменьшается, а через пару часов уменьшается до ~ 15 тыс.
Мониторинг машин показывает, что процессор не является узким местом. Однако время простоя физического диска (не SSD), по-видимому, падает на все машины, что составляет менее 15% бездействия.
Установка refresh_interval
в 60-е годы, чем до 300 с, и, наконец, 15 м, похоже, мало помогли. Шпионить за одним транслогом в одном осколке, показал, что трансляция сбрасывается каждые 30 минут, до достижения 200 МБ.
Я попытался с помощью два шардинга стратегии:
- 1 индекс, 60 черепков (без реплик).
- 3 индекса, с 20 осколками каждый (без реплик).
Обе попытки приводят к довольно похожему опыту, который, я думаю, имеет смысл, поскольку он имеет такое же количество осколков.
Оглядываясь на сегменты, я вижу, что большинство осколков имеют ~ 30 зафиксированных сегментов и аналогичное количество сегментов с возможностью поиска. Размер сегмента варьируется. В свое время попытка оптимизации индекса с max_num_segments = 1, похоже, немного помогла после его завершения (потребовалось много времени).
В любое время, начиная с начала процесса приема внутрь, после удаления использованных индексов и создания новых, они приводят к такому же поведению. Первоначально высокая пропускная способность индекса, но постепенно уменьшающаяся, задолго до достижения цели в 3 миллиарда документов. Размер индекса в это время составляет около 120 ГБ.
Я использую версию ElasticSearch 1.4. Xms и Xmx настроены на 8192 МБ, 50% доступной памяти. Буфер индексирования установлен на 30%.
Мои вопросы заключаются в следующем:
- Предполагая, что диск в настоящее время является узким местом этой установки, это явление постепенно увеличивающейся использования диска является нормальным? Если нет, что можно сделать, чтобы отрицать эти эффекты?
- Есть ли какая-то тонкая настройка, которую я могу сделать, чтобы увеличить пропускную способность индексации? Нужно ли мне? или я должен просто масштабироваться.
Какова временная область памяти процесса? стабилизируется ли скорость 15 к/с или она продолжает падать? что происходит с/с диска? (на linux, некоторые из них доступны с ps или сверху, некоторые с strace) – Andras
Я не помню точный объем памяти, будет обновляться завтра. Тем не менее, я помню довольно полезную диаграмму кучи головоломки. Скорость индексации, по-видимому, стабилизируется со скоростью 15 к/с, однако для проверки этого потребуется несколько часов. На каждой машине служба elasticsearch выполняет запись порядка 2MG/s (изначально - ее намного меньше, когда скорость исчезает), и когда занят диск, читается 50 - 80 MG/s. – Roman
Вы указываете ключи для документов или разрешаете Elasticsearch генерировать идентификаторы автоматически? Вы пробовали использовать меньше осколков? –