探索中国CIO人才现状 | 第四季调研报告
如何使用亚马逊Kinesis实现实时数据处理?
2015-06-15  来源:searchcloudcomputing#com#cn

公共云计算鼓励使用分布式应用程序,这使得企业用户能够充分利用大量服务器的优势来运行多个系统——从大型企业应用程序到有针对性的微服务。但是,管理员们应当如何轻松地把所有这些数据迁往相应的服务器呢?其中一种方法就是通过通讯总线,同时如果某个管理员希望从多个来源以近乎实时的速度迁移大容量数据,那么他应当考虑一下亚马逊的Kinesis。

亚马逊Kinesis是亚马逊网络服务(AWS)所提供的一项托管通讯服务,它可为实时数据处理应用提供高性能和低管理开销。该服务是专为接受来自于大量来源并把数据分发到各种应用程序的应用而设计的。Kinesis是基于Apache Kafka的,后者提供了一个“发布-订阅”的通讯服务。

亚马逊Kinesis的设置

设置亚马逊Kinesis“发布-订阅”平台的第一步就是定义一个Kinesis流。这一工作通常在AWS管理控制台上完成。

所谓Kinesis流,是指一组接受、存储和传递消息的来源。高容量数据流可以按多个分块进行划分,这一点与使用多个服务器进行服务器集群的扩容过程很相似。实际所需的分块数量取决于消息的平均大小、写操作记录的速度以及用户应用程序的数量。AWS管理控制台提供了一个可以帮助管理员估计用于满足他们需求所需分块数量的工具。

与其他所有的AWS资源一样,用户需要定义访问控制措施。Kinesis的访问控制措施可允许客户自行定义用户和角色的权限,从而让他们可以在队列中设置消息、获取队列的状态信息和详细内容,并从队列中读取所需信息。

生产应用程序可被授权向Kinesis队列写消息。一个消息中包括了:一个可被交付的数值或有效负载(例如一个Javascript Object Notation结构和键值对)以及一个分块键。一个分块最高每秒可以接受一千个消息;而分开键可以最多为256个字符长。Kinesis的API提供了一个Putrecord的函数,这个功能函数可以一次向一个队列增加一个消息;Putrecords函数可供批量增加消息使用。

用户应用程序则涉及Getrecords API函数。一般来说,针对性的应用程序可以在一个循环中持续不断地运行这个函数。每个记录的容量最多可支持50KB。该系统则可在一个单一的分块中每秒支持2MB的数据。如果用户需要更多的数据流量,可在他的流中增加更多的分块。Getrecords函数还支持一个liMIT参数,该参数主要用于指定在单一的一次调用中支持的最大记录数。管理员们可以使用这个功能函数来设置用户应用程序所接受的数据量,尤其是在高峰期向消息队列执行写操作时。

亚马逊Kinesis的短板

当谈及实时数据处理应用时,Kinesis还有这一些局限性。该服务最多可保留消息24小时。这一点不同于Kafka,后者可以按照实际要求进行配置,其存储周期可更长。IT团队应当为应用程序的运行分配足够的资源以便于应用程序能够在24小时内读取所有的消息。

AWS CloudWatch可以帮助监控一个消息队列的载入以及用户应用程序的流量。AWS弹性负载平衡器或自动扩展功能可以帮助确保有足够的计算资源跟上消息流。

如果用户在实际使用中超过了消息接收的上限,那么用户将会收到一个被称为ProvisionedThroughtputExceed的错误;然后该消息将被拒绝。如果在读操作过程中超出了这个阈值,那么用户同样也会收到一个ProvisionedThroughtputExceed的错误。如果需要增加容量,那么用户需要在他们的流中增加更多的分块。

为了向一个流增加分块,用户可分拆现有的分块。每一次分拆操作只需要几秒钟的时间,但是,每次只能拆分一个分块。如果有数以百计的分块,那么这就会成为一个问题,因为增加流的相对容量将显著增加所需的时间。

开发与集成

Kinesis提供了一个REST API,这样用户就可以使用几乎任何的编程语言来完成对消息队列的读写操作。AWS软件开发工具还为Kinesis功能函数提供了特定语言的绑定。

AWS提供了多个接口以简化与其他服务的集成,具体包括DynamoDB、Redshift、简单存储服务以及ElasticSearch。Kinesis是以分块时间(每小时0.015美元)和PUT运行次数(0.028美元/百万PUT)进行计费的。