风暴:实时获取前十名用户



我是风暴的新手。我有一个非常相似的要求,如下所示,

假设我有一个竞价系统,就像在任何电子商务网站中一样,我们可以对任何产品进行竞价。我得到一个负载,比如每秒 100 万个请求。现在我需要实时获取两个统计信息,并在 UI 中向用户显示。

  1. 到目前为止的出价总数(用户可以出价两次,因此我们需要合并(。
  2. 前十名出价及其相应用户根据出价金额和时间戳进行排序。

所有这些统计数据都需要实时且一致。所以我希望风暴能够胜任。 据我了解,我们可以使用像 kafka 这样的消息传递队列将传入的出价存储为日志。然后,一些消费者组可以拾取它们并将其保留在任何数据库中。 但是我需要知道风暴如何使用其螺栓聚合并找到我的前十个窗口并实时更新它,以便我可以拾取它并在 UI 中显示。

我最初的努力是,

卡夫卡 -> 投标喷口 ->螺栓(根据当前前十名过滤( ->螺栓 ->更新结果

卡夫卡 -> 投标喷口 ->螺栓(计数器( ->螺栓 ->更新结果

但我不太明白,螺栓将如何根据当前排名前十的结果进行过滤,这些结果正在更新。

我认为您需要一种可以由您的 bolts 实例共享的持久性层(缓存或数据库(。您的一个 bolt(计数器(将继续更新该持久性层中特定出价 ID 的计数,您需要一个原子操作来读取和递增(例如 redis 缓存已预定义(。当出价时间结束时,您不应再收到任何消息,并且不应对该出价 ID 的计数进行更多更新。您的其他 bolt(过滤器(应轮询持久性层的出价时间,一旦它超过您的出价时间,您应该获取计数并更新需要显示的结果。

最新更新