Можно ли перенести данные из Redshift в Elasticsearch?
Я работаю над чем-то, связанным с сервисом Amazonasticsearch. Для этого мне нужно получить данные из Amazon Redshift. Объем передаваемых данных огромен, т. Е. 100 ГБ. Есть ли способ получить его напрямую из Redshift или два? пошаговый процесс вроде Redshift->s3->asticsearch?
3 ответа
Решение
Похоже, что нет прямого канала передачи данных для передачи данных в эластичный поиск из Redshift. Один из альтернативных подходов заключается в том, чтобы сначала сбросить данные в S3, а затем вставить в эластичный поиск.
Я вижу, по крайней мере в теории, 2 возможных подхода для передачи данных из Redshift в Elasticsearch:
- Logstash, используя плагин ввода JDBC
- elasticsearch-JDBC
- Не распаковывайте данные без загрузки.
- Используйте объемную нагрузку на эластик
- Используйте большое количество записей в массовой загрузке (>5000) - меньше больших объемных загрузок лучше, чем более мелкие.
- При работе с упругим поиском AWS существует риск превышения пределов размера общей очереди.
- Обработайте один файл в лямбде, а затем рекурсивно вызовите лямбда-функцию с событием
- Перед повторением подождите пару секунд -> setTimeout. При ожидании убедитесь, что вы не бездействуете в течение 30 секунд, потому что ваша лямбда остановится.
- Не используйте создание объекта s3 для запуска вашей лямбды - вы получите несколько лямбда-функций, вызываемых одновременно.
- Не пытайтесь ставить кинезис посередине - выгрузка ваших данных в кинезис почти наверняка достигнет предела нагрузки при кинезисе.
- Контролируйте свой объем очереди эластичного поиска с помощью чего-то вроде этого:
curl https://%ES-SERVER:PORT%/_nodes/stats/thread_pool |jq ‘.nodes |to_entries[].value.thread_pool.bulk’