我正在使用Storm,它适用于很多用例。最近我看了Trident,它是 Storm 的高级抽象。它支持一次性处理并使有状态处理更容易。
但现在我想知道.. 为什么我不能总是使用 Trident 而不是 Storm?
到目前为止我读到的:
- Trident 批量处理消息,因此吞吐时间可能会更长。
- Trident 还不能处理拓扑中的循环。
使用 Trident 代替 Storm 时还有其他缺点吗?因为现在,我认为我上面列出的缺点是微不足道的。
哪些用例不能用 Trident 实现?
后果:
自从我提出这个问题后,我的公司决定先选择 Trident。我们只会在出现性能问题时使用纯 Storm。遗憾的是,这不是一个积极的决定,它只是成为默认行为(当时我不在)。
他们的假设是,在大多数用例中,我们需要状态或仅处理一次,或者我们将在不久的将来需要它。我理解他们的推理,因为从 Storm 迁移到 Trident 或返回不是一个简单的转换,但在我个人看来,没有状态的流处理的概念并没有被所有人理解,这是使用 Trident 的主要原因。