Отправляйте сообщения Firehose в корзину S3 с минимальным количеством PUT - PullRequest
0 голосов
/ 28 ноября 2018

У нас есть поток AWS Kinesis, который принимает около 15 небольших двоичных сообщений в секунду.В качестве последней меры по восстановлению данных мы хотели бы сбросить все сообщения, полученные в корзине S3 с TTL за 1-2 недели.

Мы могли бы использовать функцию Lambda для вывода каждого сообщения Kinesis в новый файл вS3.Но многие небольшие PUT стоят дорого, особенно потому, что к этим данным не будут часто обращаться (вручную, если это так).

В качестве альтернативы, AWS Firehose будет собирать для нас сообщения и отправлять их в S3 как один объект S3.Но, как я понимаю - пожалуйста, поправьте меня - Firehose просто объединяет записи, поэтому это не работает, когда сообщения двоичные и логически разделены (в отличие от строк в файле журнала).

В настоящее время я думаю об использовании лямбдыфункция прикреплена к Firehose, поэтому Firehose собирает записи за X минут, которые мы затем архивируем / архивируем, создавая файл для каждой записи и отправляя на S3 в виде одного архива.

Подходит ли это?Если да, то как мы собираем записи, используя Lambda?Мы обрабатываем многие-к-одному, поэтому я не уверен, какие коды результата / статуса передать обратно в Firehose. (Экосистема AWS для меня очень нова, поэтому, я думаю, я мог упустить очевидное решение.)

1 Ответ

0 голосов
/ 28 ноября 2018

Если вы можете принять 1 неделю TTL, вы можете увеличить срок хранения данных потока и не беспокоиться о каком-либо другом механизме хранения.

Если вы готовы платить за86 400 PUT в день ($ 0,43), вы можете иметь поток для запуска вашей лямбда-функции .Обратите внимание, что на самом деле вас могут вызывать чаще, так как для каждого события есть максимальный размер, и каждый шард вызывается отдельно.

Если вы хотите больше контроля, я рекомендую вызывать вашу функцию Lambda из CloudWatchЗапланированное событие .Я считаю, что минимальный интервал составляет одну минуту.Однако, если вы сделаете это, вам также нужно будет сохранить смещения осколков (например, в DynamoDB) и быть готовым к перхардингу.

Как вы заметили, Firehose не поддерживает многие-к-одномупреобразование.Однако вы можете использовать лямбду, чтобы взять входные записи, кодировать их в base-64 и добавить новую строку (обратите внимание, что вы кодируете Base64 дважды: один раз как преобразование записи и один раз, чтобы подготовить результат для Firehose).

...