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