使用亚马逊Kinesis处理大批量数据

亚马逊近期公布了一项名为Kinesis的服务,它支持开发者从不同来源传输大量的数据并进行处理。该服务目前处于有限预览阶段。

Kinesis到底是什么?它与SQS有什么不同?对此,BuckKniferson解释道:

看起来Kinesis将包装SQS队列并将计算实例自动扩展为新产品。Kinesis能能接受每秒百万条POST请求,将其作为流进行实时处理。用户可以将流数据直接发送给S3、发送给自己的应用进行处理、发送给关系型存储,以及类似多种途径……都是实时完成的。

SQS消息被限定在256kb的文本消息(一般来说是JSON格式,但用户也可以根据喜好选择)。Kinesis流则享有MB/S的量级,而且据我所知,它可以通过HTTP PUT接收任何类型的数据。

此外,应用可以从不同区域访问Kinesis流数据,且在24小时之内可用;而SQS消息则依赖于区域并且不可持久。如果某个区域超出范围,或是出现了某些故障,那么用户的SQS消息就丢失了。而且我认为SQS没有可以与Kinesis相媲美的可扩展性和IO。我尚未见到SQS公开发布的IOPS保证;但Kinesis每个分片能够接收1000条/秒的PUT请求。

使用Kinesis流的应用能够捕捉、存储和传输数据,对这三者来说都可以拥有多个读取和写入方。每个流的容量按分片来定义;每个分片能够执行1000条写事务,最高位1MB/秒——而且支持在不停机状态下,通过增加或移除分片,来扩展每个流的容量。

开发者可以使用Kinesis客户端库来构建使用Kinesis的应用。生产者方面使用PutRecord API 来推送数据。而在消费者方面,开发者提供一个IRecordProcessor的实现,一旦新记录创建成功,客户端将“推送”它们。此外,还有一些更底层的接口,例如GetShardIterator和GetNextRecords。在处理一条记录后,消费者代码可以把它存储在某个AWS存储服务(S3、RedShift、DynamoDB)上,或是将其传递给另一个Kinesis流。

Kinesis支持的实时处理与批处理(例如Hadoop提供的那样)不同,因为当数据可用时它将会得到尽快处理,而不必凑成批次进行执行。亚马逊列出了日志处理、社交媒体数据处理、金融事务实时处理和在线机器学习等内容,作为部分可行的使用案例。最后,另一个支持大量数据实时复杂处理的类似产品是Storm。

查看英文原文:Streaming Big Data With Amazon Kinesis

你可能感兴趣的:(使用亚马逊Kinesis处理大批量数据)