我是新来的风暴,有几个基本的问题。我的storm用例是流处理和批处理。
用例1:storm拓扑将元组作为流进行处理。
用例2:storm拓扑应该将元组作为一批元组接收并处理它。
我使用kafka作为队列机制来提供storm拓扑。
问:有没有一种方法,我可以告诉一个特定的元组是流的结尾,storm应该告诉我所有元组的处理何时完成?
storm不是这样做的正确框架,因为它是用于流处理的(用例1)。storm trident对用例2有帮助吗?
我是新来的风暴,有几个基本的问题。我的storm用例是流处理和批处理。
用例1:storm拓扑将元组作为流进行处理。
用例2:storm拓扑应该将元组作为一批元组接收并处理它。
我使用kafka作为队列机制来提供storm拓扑。
问:有没有一种方法,我可以告诉一个特定的元组是流的结尾,storm应该告诉我所有元组的处理何时完成?
storm不是这样做的正确框架,因为它是用于流处理的(用例1)。storm trident对用例2有帮助吗?
1条答案
按热度按时间v7pvogib1#
你不能告诉storm,元组是流的最后一个。但是,如果您知道您刚刚从喷口发出最后一个元组,那么您可以为自己设置一个内部标志,并且等待直到您收到所有的元组
acks
在喷口里。当所有acks
你知道,所有元组都被storm处理了。对于问题2,我不清楚你所说的“做同样的处理”是什么意思?似乎,您想在不同的模式下处理相同的数据两次(或者我理解错了什么)?为什么要区分“流”和“批”的情况?你想得到什么不同的语义?你说的“把元组看成一批元组”是什么意思。你知道你有一个有限的数据流吗?要将所有元组放入一个批中吗?或者你想做一些微量配料?
对于微配料,三叉戟将是有用的。如果你有一个真正的批量工作,风暴是不合适的。为此,您可能想查看apacheflink(免责声明,我是flink的提交者)或apachespark。两者都是支持批处理和流式处理的混合系统。根据您对流语义的需求,一个或另一个可能更适合。spark提供微批处理来模拟流式处理,而flink则进行真正的流式处理。