在我的Storm拓扑中,在处理流时,我想延迟处理某些消息,直到将来的某个时间点。这样做有哪些合理的选择?
到目前为止,我已经考虑过以下几点:
Thread.sleep
。 (但是,根据一些讨论,这不是有效利用Storm资源的推荐方法。)答案 0 :(得分:5)
我们正在使用拓扑结构元组来批量处理挂起的元组。它基本上只是将它们存储在每个正常元组的内存中,当它收到一个tick元组时,它使用批量/流水线处理将它们处理成存储/索引。
我们还在数量激增的情况下使用redis,如果检测到音量峰值,则所有元组都会重定向到每个主机上的本地redis存储,然后在音量降低后被推回拓扑处理。我们的情况可能不适用于您的情况,只是我的2c。
答案 1 :(得分:2)
使用外部消息队列来实现延时队列。
由于Storm是容错的并且是水平分布的,因此选择适合该样式的消息队列是有意义的,例如: