2013-03-20 61 views
35

我正在与Storm一起工作,很多用例都很好。最近我看了一下Trident,这是Storm的一个高级抽象。它完全支持一次处理并使状态处理更容易。风暴与三叉戟:什么时候不使用三叉戟?

但现在我想知道..为什么我不能总是使用三叉戟代替风暴?

我至今读什么:

  • 三叉戟处理批量处理邮件,所以生产时间可能会更长。
  • Trident尚未能够在拓扑中处理循环。

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

Trident无法实现哪些用例?


后果:

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

他们的假设是,在大多数使用情况下,我们需要进行状态处理或者只进行一次处理,否则我们将在不久的将来需要它。我理解他们的推理,因为从风暴转移到三叉戟或后退并不是一个容易的转换,但在我个人看来,没有状态的流处理概念并不是所有人都能理解的,这也是使用Trident的主要原因。

+1

我想你误会:三叉戟的东西,在上面运行风暴,并取代了事务拓扑的旧概念。当然,如果你喜欢,你可以使用Trident而不是核心Storm。 – 2013-03-20 18:44:41

+0

嗨戈登,我知道三叉戟运行在风暴之上。正因为如此,我想知道为什么我要暴风雨。它看起来像只有一些不常见的用例需要Storm的低级API。 – 2013-03-21 08:05:48

+2

正如我所了解的那样,当你有数百万事件时,批处理时间并不是很长(我想是秒的一部分),但是数据库负载减少了。我认为可以实现一些超时并有额外的事件。 是的,三叉戟是风暴的高级抽象,你可以也应该使用风暴API来定制一些东西。 – Alex 2013-04-05 10:10:26

回答

39

要回答你的问题:何时不应该使用Trident?每当你买不起的时候。

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

我也想强调一下,Storm保证所有消息都会被处理。有些消息可能会被多次处理。

18

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

4

Trident是一款高级抽象实时计算工具,可用于Storm Storm 0.8.x版本的Twitter Storm。 Storm是无状态的流处理框架,Trident提供有状态的流处理。

+0

嗨,我更新了我的问题,使其更加清晰:Trident无法实现哪些用例? – 2013-07-09 11:41:01

+0

嗨,如果你不需要有状态处理,那么使用Trident会浪费资源(CPU,RAM,...),因为它将状态存储在外部数据库内存中。 – 2013-07-15 17:59:10

+1

如果你没有跟踪状态,那么Trident不会“编译”任何额外开销。事实上,三叉戟“编译器”倾向于产生比我手头更高性能的拓扑结构。它包含真正优化的性能帮助函数,您不必自己编写代码。 – ChrisCantrell 2014-01-21 16:35:41

1

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

+0

嗨,实际上三叉戟符合我的所有要求,因为我问为什么我们仍然需要普通风暴。 – 2014-03-06 15:03:02

+1

然后我们可以回答你的问题,如果三叉戟不符合您的性能要求,您可以在风暴之上实现您自己的更高效的状态框架 – HakkiBuyukcengiz 2014-03-07 15:11:53

0

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

通过使用三叉戟,我们可以在单台机器上使用上述操作。所以在这种情况下不需要重组。 这样的用例中,除了“恰好一次” /“在东部一次”能够区分使用什么等

三叉戟是种分组逻辑分组

相关问题