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

Apache storm 风暴与三叉戟:何时不使用三叉戟?,apache-storm,trident,Apache Storm,Trident,我正在使用它,它适用于许多用例。最近我看了一下,这是对Storm的高级抽象。它支持一次处理,使有状态处理更容易 但现在我想知道。。为什么我不能用三叉戟代替暴风 到目前为止我读到的: Trident分批处理消息,因此吞吐量时间可能更长 Trident还不能处理拓扑中的循环 用三叉戟代替暴风雪还有其他缺点吗?因为现在,我认为上面列出的缺点是微不足道的 什么用例不能用Trident实现? 后果: 由于我问了这个问题,我的公司决定先购买三叉戟。只有在出现性能问题时,我们才会使用纯Storm。可悲的

我正在使用它,它适用于许多用例。最近我看了一下,这是对Storm的高级抽象。它支持一次处理,使有状态处理更容易

但现在我想知道。。为什么我不能用三叉戟代替暴风

到目前为止我读到的:

  • Trident分批处理消息,因此吞吐量时间可能更长
  • Trident还不能处理拓扑中的循环
用三叉戟代替暴风雪还有其他缺点吗?因为现在,我认为上面列出的缺点是微不足道的

什么用例不能用Trident实现?


后果:

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


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

如果尽可能低的延迟是您的目标,并且您不需要一次处理,然后使用Storm比Trident更好。

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

回答您的问题:什么时候不应该使用Trident?只要你能负担得起就不要

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


我还想强调一个事实,Storm保证所有消息都会得到处理。有些消息可能会被多次处理。

Chris,因为这两种技术都是开源技术,trident只是风暴顶部场景的一种实现,当然,这会带来性能开销。如果三叉戟不能满足您的需求,您可以在风暴之上创建自己的状态实现。Trident在时间上产生了更高级别的项目,如Trident ML。

假设我们要进行过滤+向元组添加字段。 如果我们使用storm,通常会使用2个机器人进行过滤,添加字段。因此,我们再次需要使用全局分组将元组发送到new bolt。因此,nw带宽可能成为瓶颈

通过使用三叉戟,我们可以在一台机器上使用上述方法。因此,在这种情况下不需要重新组合。 除了“恰好一次”/“在东一次”之外,这种用例还可以区分使用什么等


Trident是一种分组逻辑分组

我想你误解了:Trident是一种运行在Storm之上的东西,它取代了事务拓扑的旧概念。当然,如果你喜欢的话,你可以用三叉戟来代替核心风暴。嗨,戈登,我知道三叉戟在风暴顶上运行。正因为如此,我想知道我为什么要风暴。看起来Storm的低级API只适用于一些不常见的用例。正如我所理解的,当您有数百万个事件时,批处理时间并不长(我想是几秒钟),但数据库负载会减少。我认为可以实现一些超时,并有额外的事件。是的,Trident是storm的高级抽象,您可以也应该使用storm api进行定制。嗨,我更新了我的问题,让它更清楚:什么用例不能用Trident实现?嗨,如果您不需要有状态处理,那么使用Trident将浪费资源(CPU、RAM等等),因为它将状态存储在内存中的外部数据库中。如果不跟踪状态,Trident将不会“编译”任何额外开销。事实上,三叉戟“编译器”倾向于生成比我手工更高性能的拓扑。它包括真正优化的、高性能的助手功能,您无需自己编写代码。嗨,实际上Trident满足了我的所有要求,正因为如此,我问为什么我们仍然需要普通风暴。然后我们可以回答您的问题,如:;如果trident不能满足您的性能要求,您可以在storm之上实现自己的更高效的有状态框架