【发布时间】:2015-10-15 03:14:41
【问题描述】:
我们希望将数据直接从 EC2 Web 服务器流式传输到 RedShift。我需要使用 Kinesis 吗?最佳做法是什么?在存储这些数据之前,我不打算做任何特别的分析。我想要一个具有成本效益的解决方案(在加载之前使用 DynamoDB 作为临时存储可能会很昂贵)。
【问题讨论】:
标签: amazon-web-services amazon-redshift amazon-kinesis
我们希望将数据直接从 EC2 Web 服务器流式传输到 RedShift。我需要使用 Kinesis 吗?最佳做法是什么?在存储这些数据之前,我不打算做任何特别的分析。我想要一个具有成本效益的解决方案(在加载之前使用 DynamoDB 作为临时存储可能会很昂贵)。
【问题讨论】:
标签: amazon-web-services amazon-redshift amazon-kinesis
如果成本是您最关心的问题,那么与记录大小相结合的每秒记录的确切数量可能很重要。
如果您谈论的消息量非常少,则在 t2.micro 实例上运行以聚合数据的自定义应用程序几乎可以做到尽可能便宜,但它不会扩展。更大的缺点是您需要负责监控、维护和管理该 EC2 实例。
现代方法是使用 Kinesis + Lambda + S3 + Redshift 的组合,让数据流不需要 EC2 实例来管理!
此博客文章中描述了该方法:A Zero-Administration Amazon Redshift Database Loader
那篇博文没有提到的是 API Gateway,如果您确实需要执行任何类型的自定义身份验证或数据转换,您可以通过使用 Lambda 将数据代理到 Kinesis 中,而无需 EC2 实例。
这看起来像:
API Gateway -> Lambda -> Kinesis -> Lambda -> S3 -> Redshift
【讨论】:
Redshift 最适合使用 COPY command 进行批量加载。典型的模式是将数据加载到 DynamoDB、S3 或 Kinesis,然后在使用 COPY 之前将事件聚合到 Redshift。
【讨论】:
去年我在公司内部使用 Kinesis 和 Kinesis connector 实施了一个这样的系统。 Kinesis 连接器只是 AWS 发布的一个独立应用程序,我们作为 Kinesis 消费者在一堆 ElasticBeanStalk 服务器中运行,然后连接器将每隔一段时间或每条消息聚合到 S3,然后它会触发 Redshift 的 COPY 命令到定期将数据加载到 Redshift。由于它在 EBS 上运行,因此您可以调整自动扩展条件以确保集群随着来自 Kinesis 流的数据量而增长和收缩。
顺便说一句,AWS 昨天刚刚宣布 Kinesis Firehose。我没玩过,但它绝对看起来像是 Kinesis 连接器的托管版本。
【讨论】: