[Третья годовщина ES] Запись 100 миллионов данных в ES: заняло 512 секунд
[Третья годовщина ES] Запись 100 миллионов данных в ES: заняло 512 секунд

1. Предисловие

Цель этой статьи: Практикуйте планирование кластеров данных миллиардного уровня.

Ментальное путешествие: миллионы стресс-тестов данных -> Параметры оптимизации -> Предполагаемая емкость данных в миллиардах -> Запланируйте размер кластера.

Давайте сначала поймем,ES Кластерное планирование: 3 узлы,ES Память -Xms8g -Xmx8g,Оставшаяся Память должна быть зарезервирована для Давата. PageCache

Имя кластера

Имя узла

порт

Конфигурация машины

escluster

esnode-1

9300 9800

8C16G

escluster

esnode-2

9300 9800

8C16G

escluster

esnode-3

9300 9800

8C16G

kibana

9000

2C4G

es-service

8080

4C8G

Планирование емкости диска

Согласно предыдущему испытанию под давлением 100W Результаты данных показывают: Общее количество занятых первичных шардов 200MB дискового пространства.

  • Таким образом, мы можем подсчитать, что дисковое пространство, занимаемое каждым документом, составляет примерно: 0.2048 KB
  • Тогда можно будет сделать вывод 1 Дисковое пространство, занимаемое 100 миллионами документов, составляет примерно: 20000 MB ≈ 19.5 GB
  • Если каждый осколок 1 копии, Тогда это 19.5 * 2 = 39GB (приблизительная стоимость)

Имеется три экземпляра, каждый экземпляр на диске. 40 ГБ, всего 120GB,для 100 миллионов Сценарий с объемом данных вполне достаточен.

ES Написать оптимизацию

в соответствии с Официальный документ сайтаНаписать оптимизациюиметь:

  1. Use bulk requests:Использовать пакетный режим bulk Загрузить.
  2. Use multiple workers/threads to send data to Elasticsearch:Используйте многопоточность。
  3. Unset or increase the refresh interval:<font color=red>настраивать refresh_interval значение, по умолчанию 1s。 </font>

ES Поиск в режиме реального времени: После написания 1s Вы можете поискать его. То есть по умолчанию он обновляется каждую секунду.

Чтобы оптимизировать скорость записи, увеличьте это значение, чтобы уменьшить частые refresh и lucene Сегменты объединены.

Элементы конфигурации

значение по умолчанию

оптимизация

index.refresh_interval

1s

30 с (официальная рекомендация), 120 с

  1. Disable replicas fo initial loads:<font color=red>Изначально измените количество копий на 0, а затем измените его обратно после завершения записи данных.</font> (огромное улучшение), эта конфигурация может Динамическая регулировка

Элементы конфигурации

значение по умолчанию

оптимизация

number_of_replicas

1

0

  1. Disable swapping:закрыть зону подкачки。
  2. Give memory to the filesystem cacheДавать PageCache Хватит Память. (Необходим как для записи данных, так и для чтения данных)
  3. Use auto-generated ids:Используйте автоматически сгенерированные id
  4. Use faster hardware:Облачный хостиметьпредел,Текущий облачный диск имеет самую низкую производительность PL0 уровень производительности ESSD Облачный диск.
  5. Indexing buffer sizeразмер буфера индекса ,по умолчанию 10%, то есть JVM 10 ГБ, индексный буфер 1GB。

Элементы конфигурации

значение по умолчанию

оптимизация

indices.memory.index_buffer_size

10%

30%

indices.memory.min_index_buffer_size

48MB

128MB

indices.memory.max_index_buffer_size

Безлимитный

Безлимитный

Другие моменты оптимизации:

  1. translog:Приходи записывайся дважды flush(fsync) Все промежуточные операции, когда машина восстанавливается после сбоя или перезагружается, могут быть соответствии с Это восстановление

Элементы конфигурации

значение по умолчанию

оптимизация

index.translog.durability

request

async

index.translog.sync_interval

5s

120s

index.translog.flush_threshold_size

512MB

2048MB

2. Запись миллиардов данных

Этапы написания следующие:

  1. Создать индекс (оптимизацияназад)
Язык кода:json
копировать
PUT /sku_index
{
    "settings":{
        "number_of_shards":3,
        "number_of_replicas":0,
        "index.refresh_interval": "120s",
        "index.translog.durability": "async",
        "index.translog.sync_interval": "120s",
        "index.translog.flush_threshold_size": "2048mb"
    },
    "mappings":{
        "properties":{
            "skuId":{
                "type":"keyword"
            },
            "skuName":{
                "type":"text",
                "analyzer":"ik_max_word",
                "search_analyzer":"ik_smart"
            },
            "category":{
                "type":"keyword"
            },
            "basePrice":{
                "type":"integer"
            },
            "vipPrice":{
                "type":"integer"
            },
            "saleCount":{
                "type":"integer"
            },
            "commentCount":{
                "type":"integer"
            },
            "skuImgUrl":{
                "type":"keyword",
                "index":false
            },
            "createTime":{
                "type":"date",
                "format":"yyyy-MM-dd HH:mm:ss"
            },
            "updateTime":{
                "type":"date",
                "format":"yyyy-MM-dd HH:mm:ss"
            }
        }
    }
}

Можно использовать Kibana создать:

Язык кода:shell
копировать
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "sku_index"
}
  1. Запрос интерфейса
  • действоватьиндекс:sku_index индекс
  • Каждый раз вставляйте 1000 элементов партиями
  • Всего было выполнено 100 000 пакетных вставок.
  • 60 потоков
Язык кода:shell
копировать
POST http://47.99.221.206:8080/api/mockData/mockData2
{
    "indexName": "sku_index",
    "batchSize": 1000,
    "batchTimes": 100000,
    "threadCount": 60
}


Содержание ответа:
{
    "success": true,
    "data": {
        "startTime": "2022-04-09 18:17:07",
        "endTime": "2022-04-09 18:25:39",
        "totalCount": 100000000,
        "elapsedSeconds": 512,
        "perSecond": 195312
    },
    "errorCode": null,
    "errorMessage": null
}
  1. Просмотр информации об индексе
Язык кода:shell
копировать
# Посмотреть количество документов под индексом
GET /_cat/count/sku_index?v&h=count


count
100000000



# Посмотреть количество документов под индексом,Дисковое пространство, занимаемое индексом и т. д.

ПОЛУЧИТЬ /_cat/indices/sku_index?v

индекс состояния здоровья uuid pri Rep docs.count docs.deleted store.size pri.store.size

зеленый открытый sku_index Wv9u23BLQueI7R0dYQjv5w 3 0 100000000 0 27,3 ГБ 27,3 ГБ
  1. Лог сервера:
Язык кода:shell
копировать
2022-04-09 18:25:40.077  INFO 1650 --- [nio-8080-exec-7] c.c.e.controller.MockDataController      : На этот раз было импортировано в общей сложности [100000000]предметов данных, кропотливый[512]Второй, в среднем, было импортировано [195312] единиц данных на каждый континент.


На этот раз было импортировано в общей сложности [100000000]предметов данных, кропотливый[512]Второй, в среднем, было импортировано [195312] единиц данных на каждый континент.
  1. Мониторинг машины

Количество потоков

Объем импортированных данных

кропотливый

QPS

Использование процессора

Использование пропускной способности сети

Использование пропускной способности облачного диска

1

100000000

512S

195312 шт./с

42.52%

699.89 Mbit/s

12,12 раз/с

  1. Измените количество копий с 0 настраиватьдля 1

Способы модификации смотрите в документации:Официальная документация

Язык кода:shell
копировать
PUT /sku_index/_settings
{
    "settings": {
        "number_of_replicas": 1

    }

}

ответ:
{
  "acknowledged" : true
}

На этом этапе статус индекса изменится на yellow состояние.

проходить Kibana См.: Инструментирование стека. -> индекс

После распределения:

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.