0

我是 Storm 的新手,基本问题很少。我的storm用例是流处理和批处理。

用例 #1:Storm 拓扑将元组作为流接收并对其进行处理。

用例 #2:Storm 拓扑应该将元组作为一批元组接收并对其进行处理。

我使用 Kafka 作为队列机制来提供 Storm 拓扑。

问题:有没有办法,我可以告诉我一个特定的元组是流的结尾,风暴应该告诉我所有元组的处理何时完成?

Storm 不是执行此操作的正确框架,因为它用于流处理(用例 #1)。Storm Trident 对用例 #2 有帮助吗?

4

1 回答 1

3

你不能告诉 Storm,一个元组是一个流的最后一个。但是,如果您知道您刚刚从 Spout 发出了最后一个元组,您可以为自己设置一个内部标志,然后等到您acks在 Spout 中收到所有数据。当所有acks的元组都收到后,你就知道所有的元组都被 Storm 完全处理了。

对于问题2,我不清楚,您所说的“做同样的处理”是什么意思?看来,您想以不同的模式两次处理相同的数据(或者我理解错了什么)?为什么要区分“流”和“批处理”情况?你想得到什么不同的语义?“将元组作为一批元组接收”是什么意思。你知道你有一个有限的数据流吗?您想将所有元组放入一个批次吗?或者你想做一些微批处理?

对于微批处理,Trident 会很有用。如果你有一个真正的批处理作业,Storm 并不适合。为此,您可能需要查看 Apache Flink(免责声明,我是 Flink 的提交者)或 Apache Spark。两者都是支持批处理和流式传输的混合系统。根据您对流语义的需求,一种或另一种可能更合适。Spark 提供微批处理来模拟流式传输,而 Flink 进行真正的流式传输。

于 2015-09-22T22:52:29.370 回答