【问题标题】:How do I scan for a particular stream record in Amazon Kinesis如何扫描 Amazon Kinesis 中的特定流记录
【发布时间】:2015-12-22 02:48:47
【问题描述】:

我已查看有关 Kinesis 的所有 AWS 文档。我所发现的只是生产者如何将数据流式传输到运动流中,而消费者在初始化时如何使用流(FIFO 模型的种类)。如果发送到流的数据在分片中停留 24 小时,我想多次访问特定值。但是,我没有找到合适的机制来做到这一点。有没有办法扫描运动流而不是像 FIFO 模型那样处理流。

【问题讨论】:

    标签: amazon-web-services amazon-kinesis


    【解决方案1】:

    不,很遗憾你不能这样做。

    如果您知道数据的位置(即checkpoint 值),则可以从该位置开始读取分片。但除此之外,没有搜索机制。

    如果你真的需要捕获一个特定的值并多次处理它;您可能希望在您的消费者应用程序上使用一些类似内存数据库的缓存结构。如果您有如此大的数据高速移动,Redis、Memcache 或 VoltDB 可能会有所帮助。

    【讨论】:

    • Is'nt Kinesis 是发布者订阅者模型。如果是这样,那么我们应该能够捕获流中的任何数据点并多次发布或处理它?
    • 是的,如果您仔细实施,这种方法可能会奏效。但不要忘记,检查点只是一个占位符,就像光标一样。它不对应于特定数据。 Kinesis 不是键值存储。
    • 在Kinesis的后台系统中,有一个概念叫做“Shard Iterator”。要组成分片迭代器,您需要将“起始序列号”作为参数(这是一个 ~56 字符长的数值,您将其视为 KCL 应用程序的发电机数据库中的检查点)。然后 Kinesis 客户端为您提供一个关于该起始序列号(大约 224 个字符)的分片迭代器。构建分片迭代器后,您要求“分片中的其余数据,从该点开始”。 TLDR;您不能要求单条记录。
    【解决方案2】:

    当您将记录放入 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 顺序)进行了优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多