我已经检查了Kinesis上的所有AWS文档。我所发现的只是生产者如何将数据流传输到kinesis流上,消费者如何在初始化时消耗这些流(一种FIFO模型)。如果发送到流的数据在shard中停留24小时,我想多次访问特定的值。然而,我没有找到一个合适的机制来做到这一点。有没有一种方法可以扫描驱动蛋白流,而不是像FIFO模型那样处理流。
不,很遗憾你不能这么做。
如果你知道数据的位置(即checkpoint
值),你就可以从那个地方开始读取碎片。但除此之外,没有搜索机制。
如果你真的需要捕捉一个特定的值并对其进行多次处理;您可能希望在使用者应用程序上使用一些类似内存中数据库的缓存结构。如果你有这么大的数据在高速移动,Redis、Memcache或VoltDB可能会很有帮助。
当您将记录放入Kinesis时,生产者将获得序列ID和碎片ID(请参阅PutRecord的API):http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html)。
响应语法:
{
"SequenceNumber": "string",
"ShardId": "string"
}
您可以使用此序列ID和碎片ID从消费者端的驱动器流中获取记录(请参阅GetShardIdeator的API,此处:http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html)。
请求语法:
{
"ShardId": "string",
"ShardIteratorType": "string",
"StartingSequenceNumber": "string",
"StreamName": "string"
}
请注意,如果你正在寻找更多的pub子模型,你应该使用SNS,而不是Kinesis,它更适合近实时的事件流处理(主要按FIFO顺序)。