Вопрос
Я прочитал это и это и это статьи.Но они дают противоречивые ответы на вопрос: как настроить разбиение при загрузке данных в S3 из Kinesis Stream?
Подробнее
В настоящее время я использую Firehose длядоставить данные из Kinesis Streams в Афину.После этого данные будут обрабатываться с помощью EMR Spark.
Время от времени мне приходится обрабатывать исторические данные в Kinesis Streams.Проблема в том, что моя логика Spark практически не зависит от разбиения данных и порядка обработки событий.Но Firehouse поддерживает разбиение только на ingestion_time
(в Kinesis Stream), а не на любое другое настраиваемое поле (мне нужно event_time
).
Например, в разделе Firehouse 2018/12/05/12/some-file.gz
я могу получить данные за последние несколько лет.
Временные решения
Не могли бы вы помочь мне выбрать один из следующих вариантов?
- Копирование / разбиение данных из Kinesis Steam с помощьюКастомная лямбда.Но это выглядит более сложным и подверженным ошибкам для меня.Возможно, потому что я не очень знаком с лямбдами AWS.Более того, я не уверен, насколько хорошо он будет работать при массовой загрузке.На этой статье было сказано, что лямбда-опцион намного дороже, чем доставка в Firehouse.
- Загрузите данные в Firehouse, затем запустите задание Spark EMR, чтобы скопировать данные в другой сегмент с правильным разбиением.По крайней мере, для меня это звучит проще (предвзято, я только начинаю с AWS Lambas).Но у него есть недостаток двойного копирования и дополнительного искрового задания.
За один час у меня может быть до 1M строк, которые занимают до 40 МБ памяти (в сжатом состоянии).От Использование AWS Lambda с Amazon Kinesis Я знаю, что ограничение источника событий от Kinesis до Lambda имеет ограничение в 10 000 записей на пакет.Будет ли эффективно обрабатывать такой объем данных с помощью лямбды?