我正在使用Storm,对很多用例都很好。最近我看了Trident,这是Storm的高级抽象。它支持完全一次处理,并使状态处理更容易。
但现在我在想..为什么我不能总是使用Trident代替Storm?
到目前为止我读到的内容:
使用Trident而不是Storm时还有其他缺点吗?因为现在,我认为上面列出的缺点是微不足道的。
使用Trident无法实现哪些用例?
后果:
因为我问了这个问题,我的公司决定先去三叉戟。当出现性能问题时,我们只会使用纯粹的Storm。可悲的是,这不是一个积极的决定,它只是成为默认行为(当时我不在身边)。
他们的假设是,在大多数用例中,我们需要状态或只需一次处理,否则我们将在不久的将来需要它。我理解他们的推理是因为从Storm转到Trident或后面并不是一个简单的转换,但在我个人看来,所有人都不理解没有状态的流处理概念,这是使用Trident的主要原因。
答案 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是一种分组逻辑分组