У меня есть веб-приложение, написанное на node.js, распределенное между несколькими веб-серверами с балансировкой нагрузки для рекламного проекта, над которым я работаю. Я пытаюсь выяснить, как лучше всего собирать и распространять данные журнала для показов объявлений, чтобы я мог проанализировать данные позже.
Мы решили хранить данные в формате Apache Avro и будем использовать Apache Spark для обработки данных. Мы выбрали Avro из-за способа доступа к данным, и он кажется наиболее подходящим.
В настоящее время у меня настроен поток Kinesis Firehose, и я использую AWS-SDK для Node.js для отправки данных Avro о каждом показе, которые затем в конечном итоге сохраняются в S3. Проблема Kinesis объединяет все файлы, которые я отправляю ему, для каждого пакета, который он записывает в S3, поэтому, если я настроил его на запись каждые 300 секунд, он поставит в очередь все файлы Avro, объединит их, а затем запишите их на S3. Полученные файлы больше не являются действительными файлами Avro, поскольку они объединены вместе.
Может быть, было бы лучше, если бы я просто отправил необработанные данные JSON в поток Kinesis, а затем другое приложение преобразовало бы данные JSON в Avro? Немного раздражает необходимость писать еще одну службу только для промежуточной обработки данных, и мне придется координировать изменения в формате исходных данных с моей службой преобразования.
Есть ли лучший подход?