我正在使用storm,它适用于许多用例。最近我看了一下trident,它是storm的高级抽象。它支持一次处理,使有状态处理更容易。
但现在我想知道。。为什么我不能用三叉戟代替风暴?
到目前为止我读到的:
trident分批处理消息,因此吞吐量时间可能更长。
trident还不能处理拓扑中的循环。
使用三叉戟代替风暴还有其他缺点吗?因为现在,我认为我上面列出的缺点是微不足道的。
哪些用例不能用trident实现?
善后:
因为我问了这个问题,我的公司决定先买三叉戟。我们将只使用纯风暴时,有性能问题。可悲的是,这不是一个积极的决定,它只是成为默认行为(我当时不在身边)。
他们的假设是,在大多数用例中,我们需要状态或者只需要一次处理,否则我们将在不久的将来需要它。我理解他们的推理,因为从风暴移动到三叉戟或返回并不是一个容易的转变,但在我个人看来,没有状态的流处理的概念并没有被所有人理解,这是使用三叉戟的主要原因。
5条答案
按热度按时间qncylg1j1#
trident是在twitterStorm之上进行实时计算的高级抽象,可在Storm0.8.x中获得。storm是无状态流处理框架,trident提供有状态流处理。
vsdwdz232#
chris,由于这两个都是开源技术,trident只作为风暴之上的一个场景的实现,当然,这带来了性能开销。如果三叉戟不能满足您的要求,您可以在风暴之上创建自己的状态实现。三叉戟在时间上产生了更高级别的项目,如三叉戟ml。
dxxyhpgq3#
如果您的目标是尽可能降低延迟,并且不需要一次处理,那么使用storm比trident更好。
yzckvree4#
回答你的问题:你什么时候不用三叉戟?只要你有能力不这样做。
三叉戟增加了风暴拓扑的复杂性,降低了性能并生成状态。扪心自问:你是否需要trident的“精确一次”处理语义,或者你能否接受storm的“至少一次”处理语义。只有一次,使用三叉戟,否则不要。
我还想强调一个事实,即storm保证所有消息都会得到处理。有些消息可能只处理了不止一次。
9udxz4iz5#
假设我们要对元组进行过滤+字段添加。如果我们使用风暴通常我们使用2个机器人进行过滤,添加字段。因此,我们需要再次发送元组到新的螺栓可能是使用全局分组。因此,nw带宽可能成为瓶颈。
通过使用三叉戟,我们可以在一台机器上使用上述方法。所以在这种情况下不需要重组。这样的用例除了“恰好一次”/“在东一次”之外,还可以区分使用什么等。
三叉戟是一种分组逻辑分组