Я сравниваю 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%.
Мои вопросы таковы:
- Предполагая, что диск в настоящее время является узким местом этой установки, является ли это явление постепенного увеличения использования диска нормальным? Если нет, что можно сделать, чтобы отрицать эти эффекты?
- Есть ли какая-то тонкая настройка, которую я могу сделать, чтобы увеличить пропускную способность индексации? Нужно ли мне? или я должен просто масштабироваться.