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