我有一个用node.js编写的web应用程序,分布在我正在开发的一个广告技术项目的多个负载平衡Web服务器中。我试图找出如何最好地收集和分发所投放广告展示的日志数据,以便稍后分析数据。分布式展示数据收集的体系结构
我们决定将数据存储在Apache Avro格式中,我们将使用Apache Spark处理数据。我们选择Avro是因为我们要访问数据的方式,它看起来是最合适的。
目前我有一个Kinesis Firehose流设置,我使用AWS-SDK for Node.js发送关于每个展示的Avro数据,然后最终存储在S3中。问题Kinesis会将它发送给它的所有文件连接到它写入S3的每个批处理中 - 因此,如果我将它配置为每隔300秒写入一次,那么它将排队所有Avro文件,将它们连接起来,然后把它们写入S3。由于它们合并在一起,生成的文件不再是有效的Avro文件。
也许这会更好,如果我只是将原始JSON数据发送到Kinesis流,然后让另一个应用程序将JSON数据转换成Avro?很烦人的是,必须为中间数据处理编写另一项服务,但我必须通过转换服务协调对源数据格式的更改。
有没有更好的方法?