2015-12-22 63 views
1

我已經檢查的所有AWS文檔上室壁運動。我發現的所有內容都是生產者如何將數據流式傳輸到kinesis流上,並且消費者在初始化時使用這些流(FIFO類型的種類)。如果發送到流的數據在碎片中保留24小時,我想多次訪問特定值。但是,我沒有找到一個合適的機制來做到這一點。有沒有辦法掃描kinesis流而不是像FIFO模型那樣處理流。我如何在亞馬遜掃描特定流記錄室壁運動

回答

1

沒有呢,可惜你不能做到這一點。

如果你知道你的數據的位置(即checkpoint值),你可以開始閱讀碎片從那個地方開始。但除此之外,沒有搜索機制。

如果你真的需要捕捉特定的值,並多次對其進行處理;您可能需要在消費者應用程序上使用一些內存中數據庫式緩存結構。如果你有這麼大的數據高速移動,Redis,Memcache或者VoltDB可能會有所幫助。

+1

Is'nt室壁運動是一個出版商訂購模式。如果是這種情況,那麼我們應該能夠抓住流中的任何數據點併發布或多次處理它? – ZZzzZZzz

+0

是的,如果您仔細實施,該方法可能會有效。但不要忘記,檢查點只是一個佔位符,就像遊標一樣。它不符合特定的數據。 Kinesis不是一家重要的商店。 – az3

+1

在Kinesis的後臺系統中,有一個叫做「碎片迭代器」的概念。爲了組成一個分片迭代器,可以將「開始序列號」作爲一個參數(這是一個~56字符長的數字值,在KCL應用程序的發電機數據庫中將其視爲檢查點)。然後Kinesis客戶端爲您提供一個關於該起始序列號的分片迭代器(具有〜224個字符)。在構建分片迭代器之後,您要求「從該點開始的分片中的其餘數據」。 TLDR;您無法呼叫單個記錄。 – az3

0

當您將記錄放入Kinesis中時,製作者正在獲取序列ID和碎片ID(請參閱PutRecord的API:http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html)。

響應語法:

{ 
    "SequenceNumber": "string", 
    "ShardId": "string" 
} 

您可以使用該序列ID和碎片ID來從消費者端的室壁運動流獲取該記錄(見GetShardIterator這裏的API:http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html)。

請求語法:

{ 
    "ShardId": "string", 
    "ShardIteratorType": "string", 
    "StartingSequenceNumber": "string", 
    "StreamName": "string" 
} 

請注意,如果你正在尋找更多的發佈 - 訂閱模式,你應該使用SNS而不是室壁運動,這是更多的事件流處理(主要是先進先出的順序優化)近實時。