2017-08-04 54 views
0

我打算使用其數據需要同步到CloudSearch的DynamoDB。我知道Lambda可以使用,但我想爲此使用Kinesis。所以生產者將是DynamoDB,它將爲表中的每個PUT/DELETE生成數據流。AWS kinesis,如何確保在使用多個分片時訂購的郵件傳遞

我的設計是非常簡單的: (假設消費者接收記錄有序)

  • 接收記錄
  • 同步到CloudSearch
  • (重複)

我有想知道KCL如何確保在消費者端有序交付記錄時,如果有多個碎片存在的話。從API文檔,這就是我理解

  1. 我們需要創建一個每個碎片迭代器,使用GetShardIterator
  2. 隨着該碎片迭代器,我可以在一個特定的序列碎片的所有項目。

但是,如果我想要將DynamoDB中的數據同步到CloudSearch,那麼我需要確保所有記錄都以完全相同的順序同步。這裏是我感到困惑的地方:

  1. 可以將物品同時放入不同的碎片嗎?
  2. (如果1是真的),那麼如果我有兩個碎片,那麼每個碎片都需要一個ShardIterator?
  3. (如果1,2爲真)如果我需要確保所有記錄都以有序方式同步,那麼我需要一個線程,它按正確的順序獲取記錄,不是這樣嗎?
  4. 如果我的想法是正確的,那麼我如何才能實現有序接收兩個碎片?

回答

0

如果我的想法是正確的,那麼我如何才能實現有序接收兩個碎片?

你不自己做同步。相反,您需要仔細思考並選擇一個分區鍵,以便可以獨立處理形成的分區。

E.g.你正在索引記錄,記錄有一個ID字段。如果您可以同時更新搜索索引中具有不同id的記錄,那麼記錄id將是一個合適的字段作爲分區鍵。

使用KCL:

它提供的記錄排序,以及讀取和/或以相同的順序將多個亞馬遜的Kinesis應用重放記錄的能力。 Amazon Kinesis客戶端庫(KCL)將給定分區鍵的所有記錄傳送到同一個記錄處理器,從而更輕鬆地構建從同一Amazon Kinesis流讀取(例如,執行計數,聚合和過濾)的多個應用程序。

https://aws.amazon.com/kinesis/streams/