亚马逊近期公布了一项名为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 。
评论