Есть 2 способа сжатия данных:
1. Включить сжатие GZIP / Snappy в потоке Firehose - это можно сделать через саму консоль
Firehose буферизует данные, и после достижения порогового значения он берет все данные и сжимает их вместе для создания объекта gz.
Плюсы :
- Минимальные усилия, необходимые на стороне производителя - просто измените настройку в консоли.
- Минимальные усилия, необходимые на стороне потребителя - Firehose создает объекты .gz в S3 и устанавливает метаданные для объектов, отражающие тип сжатия. Следовательно, если вы читаете данные через AWS SDK, SDK выполнит распаковку за вас.
Минусы :
- Поскольку Если вы используете Firehose, вы не будете экономить на расходах Firehose. Вы сэкономите на стоимости S3 (за счет меньшего размера объектов).
2. Сжатие кодом производителя - Необходимо написать код
Я реализовал это в Java несколько дней назад. Мы загружали более 100 петабайт данных в Firehose (откуда они записывались в S3). Для нас это была огромная сумма.
Итак, мы решили сделать сжатие на стороне продюсера. В результате в KF поступают сжатые данные, которые записываются в S3. Обратите внимание: поскольку KF не сжимает его, он не знает, какие это данные. В результате объекты, созданные в s3, не имеют сжатия ".gz". Следовательно, потребители не знают, какие данные находятся в объектах. Затем мы написали оболочку поверх AWS Java SDK для S3, которая считывает объект и распаковывает его.
Плюсы:
- Наше сжатие коэффициент был близок к 90%. Это напрямую привело к экономии 90% затрат на Firehose. Плюс дополнительная экономия S3, как в подходе 1.
Минусы:
- Не совсем минус, но потребуются дополнительные усилия по разработке. Чтобы создать оболочку поверх AWS SDK, необходимо выполнить тестирование и c.
- Сжатие и декомпрессия требуют больших ресурсов ЦП. В среднем, эти 2 вместе увеличили загрузку ЦП на 22%.