【发布时间】:2016-03-01 19:43:12
【问题描述】:
我有一个用 node.js 编写的网络应用程序,分布在几个负载平衡的网络服务器中,用于我正在从事的一个广告技术项目。我正在尝试找出如何最好地收集和分发广告展示的日志数据,以便以后分析数据。
我们决定以 Apache Avro 格式存储数据,并且我们将使用 Apache Spark 来处理数据。我们选择 Avro 是因为我们要访问数据的方式,而且它似乎是最合适的。
目前我有一个 Kinesis Firehose 流设置,我使用适用于 Node.js 的 AWS-SDK 发送有关每次展示的 Avro 数据,然后最终存储在 S3 中。问题 Kinesis 将我为它写入 S3 的每个批次发送给它的所有文件连接起来——所以如果我将它配置为每 300 秒写入一次,那么它会将所有 Avro 文件排队,连接它们,然后将它们写入 S3。结果文件不再是有效的 Avro 文件,因为它们已合并在一起。
如果我只是将原始 JSON 数据发送到 Kinesis 流,然后让另一个应用程序将 JSON 数据转换为 Avro,也许会更好?不过,不得不为中间数据处理编写另一个服务有点烦人,而且我必须通过我的转换服务来协调对源数据格式的更改。
有更好的方法吗?
【问题讨论】:
标签: node.js amazon-web-services apache-spark avro amazon-kinesis