如何将多个kinesis数据流合并为一个数据流?

时间:2017-04-25 19:25:28

标签: amazon-web-services stream amazon-kinesis

我有来自3个不同服务器(3个数据流)的数据。是否可以在kinesis消费者应用程序中合并这些数据(更新/ upsert的类型)并将更新的数据作为输出?
我从流2,3中获得的数据取决于流1.例如,

  

Stream 1(ItemDetails) - {itemId,itemName,itemdescription},
stream   2(ItemtoCart) - {ItemId},
流3(订购) - {ItemId}。

我期待的最终流输出是

  

OutputStream - {itemId,itemName,itemdescription,itemtoCart_flag,   itemOrdered_flag}

流1正在以10K记录/秒的速率接收数据。

1 个答案:

答案 0 :(得分:1)

假设有三个流,如下所示,

stream                   event in stream
stream1(ItemPurchased) - {"item" : 1, "totalQuantity": 100}

stream2(ItemOrdered)   - {"item" : 1, "sold": 1}

stream3(ItemCancelled) - {"item" : 1, "orderCancelled": 1}

这些流用于购买物品,然后出售和/或取消。

说,我想从这些事件中建立项目可用数量的最终状态。 我会做的是,

  • 使用stream / kinesis中的每个事件都有lambda功能,但不确定它与MongoDB,Cassandra等非aws数据存储区的对话有多容易
  • 并且具有基于事件构建最终状态的逻辑

州过渡表

stream                   events                                  consumer/onEvent          state (could be MongoDB, Cassandra)
stream1(ItemPurchased) - {"item" : 1, "totalQuantity": 100}   -> create new state      -> {"item" : 1, "availableQuantity": 100} 

stream2(ItemOrdered)   - {"item" : 1, "sold": 1}              -> decrease the quantity -> {"item" : 1, "availableQuantity": 100 - 1} 

stream3(ItemCancelled) - {"item" : 1, orderCancelled: 1}      -> increase the quantity -> {"item" : 1, "availableQuantity": 99 + 1}

希望能回答你的问题,但不像你问的那样,最终的状态表不是流。