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

Chr*_*fer 39 trident apache-storm

我正在使用Storm,它适用于很多用例.最近我看了一下Trident,它是Storm的高级抽象.它支持一次性处理,使状态处理更容易.

但现在我想知道..为什么我不能总是使用Trident而不是Storm?

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

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

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

Trident无法实现哪些用例?


后果:

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

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

Joh*_*ore 44

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

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

我还想强调Storm确保所有消息都将被处理的事实.某些消息可能只被处理多次.


Chr*_*lom 20

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