亚马逊Kinesis中的读写事务

8
我对Kinesis还不太熟悉,所以这可能是一个非常基本的问题,但我没有找到明确的答案来解释Kinesis流中读取和写入事务之间的实际区别。
以下是Amazon Kinesis Limits中的相关部分:
- GetShardIterator每秒可以提供每个打开分片最多5个事务。 - GetRecords可以检索10 MB的数据。 - 每个分片可以支持每秒最多5个事务进行读取,最大总数据读取速率为2 MB/秒。 - 每个分片可以支持每秒最多1024条记录进行写入,最大总数据写入速率为1 MB/秒(包括分区键)。此写入限制适用于PutRecord和PutRecords等操作。
它明确提到每秒每个分片可进行5次读取和1024次写入。为什么读取比写入更昂贵?或者我是否还没有掌握关键的Kinesis概念?
2个回答

8
Kinesis可以让你将细粒度数据注入到流中,并读取批量记录以处理信息。因此,每秒可读取的兆字节数比每个分片可获得的读取事务数更加重要。例如,您可能有一个繁忙的网站,每分钟生成数千次浏览量,并有一个EMR集群来处理您的访问日志。在这种情况下,您将拥有比读取事件更多的写入事件。同样适用于点击流、金融交易、社交媒体提要、IT日志和位置跟踪事件等。

所以每秒5/1024个事务仅适用于单个GetRecords和PutRecord(s)调用,其中单个GetRecords可能会返回许多记录供我处理? - KennethJ

5
常见的使用场景是多个生产者将它们的事件写入Kinesis。例如多个Web服务器、多个浏览器或多个移动设备。每个生产者都可以逐个或批量地写入多个事件,最多可达500个。
另一方面,事件的消费者只有少数几个进程。简单的用例是“慢速”读取器从Kinesis流中读取事件批次(例如,每10秒读取10,000个事件)并将它们作为单个日志文件写入S3。
在这种情况下,你要写入成千上万的事件(大多是逐个写入),但你每秒钟(或以上面示例中的10秒钟)只需读取所有在此期间添加到流中的事件一次。因此,写入和读取的比率为1024:1。
在大多数情况下,kinesis流的消费者数量很小,不止一个读取器。例如,在上面的“慢速”读取器之上,你可以有一个“快速”读取器,扫描传入的事件并过滤它们或总结其值,以便能够实时反应。该快速读取器可以识别欺诈交易并阻止它们,或计算操作仪表板的实时计数器。
然而,相对于写入的数量,读取的数量仍然很少。在这种情况下,“快速”读取器将每0.25秒读取一次以实现近乎实时的反应事件。因此,写入和读取的比率为1024:5(=1+4)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接