我一直在尝试在一个项目中使用storm的多语言协议。我已经通读了协议,在很大程度上它是有意义的。查看python多语言源代码,我注意到在发出元组后的emit方法中,它调用readtaskids()方法。
def emit(*args,**kwargs):
__emit(*args,**kwargs)
return readTaskIds()
在“概念”页上,它提到使用directgrouping()可以将输出发送到特定任务。jsonserializer(处理多语言通信)的第124-129行正在检查“need\u task\u ids”字段是否存在,并且只有在json中定义为false时才会发送taskids。
所以我想知道是否有人能为我解释/确认为什么storm需要tasksids?在multilang协议中没有提到它。它是否仅用于希望使用directgrouping()将元组发送到特定任务的用例?还是有什么好处?在我的json中添加一个“need\u task\u ids”字段可以很容易地阻止这种情况的发生(如果我理解正确的话),但是我不知道这样做是否有任何不利之处?
1条答案
按热度按时间zqdjd7g91#
我不熟悉多语言协议。不过,您的解释符合我使用storm的低级JavaAPI的经验。在这个api中,您可以在直接流的情况下指定任务id,或者在其他分组(例如,shuffle、field、all)的情况下不指定任务id。因此,我认为你自己的解释是正确的。我还知道一些内部clojure代码,它执行完全相同的操作:它检查是否提供了任务id。如果没有,它将查找指定的连接模式,计算任务id,并在发送元组后将它们返回给用户代码。