5

在我的Storm拓扑中,在处理流时,我想将一些消息的处理延迟到未来的某个时间点。这样做有哪些合理的选择?

到目前为止,我想到了以下几点:

  • 使用 Java 的Thread.sleep. (然而,根据一些讨论,这不是有效利用 Storm 资源的推荐方式。)
  • 使用延迟队列...
  • Storm 是否有一些 API 用于延迟我忽略的消息?
  • ZeroMQ 是否提供了 Storm(如果已修改)可以利用的延迟消息传递 API?
4

2 回答 2

5

我们正在使用拓扑刻度元组来批量处理待处理的元组。它基本上只是将它们存储在每个普通元组的内存中,当它接收到一个刻度元组时,它使用批量/流水线处理将它们处理成存储/索引。

我们还会在容量激增的情况下使用 redis,如果检测到容量峰值,所有元组都重定向到每个主机上的本地 redis 存储,然后在容量下降后被推回拓扑处理。我们的情况可能不适用于您的情况,仅适用于我的 2c。

于 2013-05-16T19:10:55.803 回答
2

使用外部消息队列来实现延时队列。

由于 Storm 是容错且水平分布的,因此选择适合该风格的消息队列是有意义的,例如:

  • 卡夫卡
  • 亚马逊 SQS
  • 兔MQ
于 2013-07-10T05:31:48.603 回答