Сохраняющиеся сообщения Kinesis на S3 в формате Parquet - PullRequest
0 голосов
/ 28 мая 2019

У меня есть поток Kinesis, в который мое приложение записывает ~ 10K сообщений в секунду в формате прото.

Я хотел бы сохранить эти сообщения на S3 в формате паркета. Для более удобного поиска мне нужно разделить мои данные по полю ID пользователя, которое является частью сообщения.

В настоящее время у меня есть лямбда-функция, которая запускается событием Kinesis. Он получает до 10 тыс. Сообщений, группирует их по идентификатору пользователя и затем записывает эти файлы в S3 в формате паркета.

Моя проблема в том, что файлы, которые генерирует эта лямбда-функция, очень малы, ~ 200 КБ, хотя я хотел бы создать ~ 200 МБ файлов для лучшей производительности запросов (я запрашиваю эти файлы с помощью AWS Athena).

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

Мне интересно, стоит ли мне использовать Spark, как описано в этом вопросе.

1 Ответ

0 голосов
/ 28 мая 2019

Возможно, вы могли бы использовать два дополнительных сервиса от AWS:

AWS Kinesis Data Analytics для получения данных из Kinesis Stream и генерации анализа SQL для ваших данных (группы, фильтра и т. Д.). Подробнее здесь: https://aws.amazon.com/kinesis/data-analytics/

AWS Kinesis Firehose подключен после Kinesis Data Analytics. С помощью этого сервиса мы можем создавать файл партера на s3 каждые X минут или каждые Y МБ с поступившими данными. Подробнее здесь: https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html

Второй способ сделать это - использовать Spark Structured Streaming. Таким образом, вы можете читать из AWS Kinesis Stream, фильтровать неиспользуемые данные и экспортировать в s3, как описано здесь: https://databricks.com/blog/2017/08/09/apache-sparks-structured-streaming-with-amazon-kinesis-on-databricks.html

P.S .: В этом примере показано, как выводить данные в локальную файловую систему, но вы можете изменить ее на местоположение s3.

...