【发布时间】:2015-12-22 02:48:47
【问题描述】:
我已查看有关 Kinesis 的所有 AWS 文档。我所发现的只是生产者如何将数据流式传输到运动流中,而消费者在初始化时如何使用流(FIFO 模型的种类)。如果发送到流的数据在分片中停留 24 小时,我想多次访问特定值。但是,我没有找到合适的机制来做到这一点。有没有办法扫描运动流而不是像 FIFO 模型那样处理流。
【问题讨论】:
标签: amazon-web-services amazon-kinesis
我已查看有关 Kinesis 的所有 AWS 文档。我所发现的只是生产者如何将数据流式传输到运动流中,而消费者在初始化时如何使用流(FIFO 模型的种类)。如果发送到流的数据在分片中停留 24 小时,我想多次访问特定值。但是,我没有找到合适的机制来做到这一点。有没有办法扫描运动流而不是像 FIFO 模型那样处理流。
【问题讨论】:
标签: amazon-web-services amazon-kinesis
不,很遗憾你不能这样做。
如果您知道数据的位置(即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 从消费者端的 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 顺序)进行了优化。
【讨论】: