风暴批处理

时间:2015-09-22 18:26:53

标签: apache-kafka apache-storm trident

我是Storm新手,几乎没有基本问题。我的风暴用例是流和批处理。

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

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

我使用Kafka作为排序机制来提供Storm拓扑。

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

Storm不是正确的框架,因为它用于流处理(用例#1)。 Storm Trident会帮助用例#2吗?

1 个答案:

答案 0 :(得分:3)

你无法告诉Storm,元组是流的最后一个。但是,如果您知道刚刚从Spout发出最后一个元组,则可以为自己设置内部标记,并等待直到您在Spout中收到所有acks。收到所有acks后,您就会知道Storm完全处理了所有元组。

对于问题2,我不清楚你的意思是"做同样的处理"?看来,你想在不同的模式下处理相同的数据两次(或者我理解错了)?为什么要区分" stream"和"批次"案件?你想要获得的不同语义是什么?你是什​​么意思"将元组作为一批元组加入#34;。你知道你有一个有限的数据流吗?您想将所有元组放入一个批处理中吗?或者你想做一些微批处理?

对于微批处理,Trident会很有用。如果你有一个真正的批处理工作,Storm就不合适了。为此,您可能需要查看Apache Flink(免责声明,我是Flink的提交者)或Apache Spark。两者都是支持批量和流媒体的混合系统。根据您对流式语义的需求,这些或其他可能更适合。 Spark提供微批处理以模拟流式传输,而Flink则实时流式传输。