风暴与三叉戟:何时不使用三叉戟?

时间:2013-03-20 10:29:03

标签: apache-storm trident

我正在使用Storm,对很多用例都很好。最近我看了Trident,这是Storm的高级抽象。它支持完全一次处理,并使状态处理更容易。

但现在我在想..为什么我不能总是使用Trident代替Storm?

到目前为止我读到的内容:

  • Trident批量处理消息,因此吞吐时间可能会更长。
  • Trident尚无法处理拓扑中的循环。

使用Trident而不是Storm时还有其他缺点吗?因为现在,我认为上面列出的缺点是微不足道的。

使用Trident无法实现哪些用例?


后果:

因为我问了这个问题,我的公司决定先去三叉戟。当出现性能问题时,我们只会使用纯粹的Storm。可悲的是,这不是一个积极的决定,它只是成为默认行为(当时我不在身边)。

他们的假设是,在大多数用例中,我们需要状态或只需一次处理,否则我们将在不久的将来需要它。我理解他们的推理是因为从Storm转到Trident或后面并不是一个简单的转换,但在我个人看来,所有人都不理解没有状态的流处理概念,这是使用Trident的主要原因。

5 个答案:

答案 0 :(得分:44)

回答你的问题:什么时候不应该使用Trident?每当你负担不起时。

Trident增加了Storm拓扑的复杂性,降低了性能并生成了状态。问自己一个问题:你是否需要Trident的“一次性”处理语义,或者你能否接受Storm的“至少一次”处理语义。只需一次,使用Trident,否则不要。

我还想强调一下Storm保证所有消息都会被处理的事实。某些消息可能只会被处理多次。

答案 1 :(得分:20)

如果最低可能的延迟是您的目标,并且您不需要完全一次处理,那么使用Storm比Trident更好。

答案 2 :(得分:4)

Trident是在Storm Storm上进行实时计算的高级抽象,可在Storm 0.8.x中使用。 Storm是无状态流处理框架,Trident提供有状态流处理。

答案 3 :(得分:1)

Chris,因为这两个是开源技术,三叉戟在风暴之上只是一个场景的实现,当然,这带来了性能开销。如果三叉戟不能满足您的要求,您可以在风暴之上创建自己的州实施。 Trident及时产生了更高级别的项目,如Trident-ML。

答案 4 :(得分:0)

假设我们想要对元组进行过滤+添加字段。 如果我们通常使用风暴我们使用2个机器人进行过滤,添加字段。所以我们需要通过使用全局分组将元组发送到新的螺栓。所以这里nw带宽可能成为瓶颈。

通过使用三叉戟,我们可以在一台机器上使用上面的操作。所以在这种情况下不需要重新组合。 除了“恰好一次”/“在东方一次”之外,这样的用例可以区分使用的内容等。

Trident是一种分组逻辑分组