我一直在尝试将Storm的Multilang协议用于项目。我已经阅读了protocol,而且大部分内容都是有道理的。查看python multilang源代码我注意到在发出元组后的emit方法中,它调用了一个readTaskIds()方法。
def emit(*args, **kwargs):
__emit(*args, **kwargs)
return readTaskIds()
在concepts page上,它提到使用directGrouping()可以将输出发送到特定任务。 JsonSerializer(处理多重通信)的第124-129行检查是否存在“need_task_ids”字段,只有在json中将其定义为false时才会发送任务。
所以我想知道是否有人能解释/确认为什么Storm需要TasksIds?在multilang协议中没有提到它。是否仅用于想要使用directGrouping()将元组发送到特定任务的用例?或者拥有它有什么好处?在我的json中添加“need_task_ids”字段很容易阻止这种情况发生(如果我理解正确的话),但我不知道这样做是否有任何缺点?
答案 0 :(得分:1)
我不熟悉multilang协议。但是,您的解释符合我使用Storm的低级Java API的经验。在此API中,您可以在直接流的情况下指定task-id,或者在其他分组的情况下指定任务-id(例如,shuffle,field,all)。因此,我声称你自己的解释是正确的。我也知道一些内部Clojure代码完全相同的事情:它检查是否提供了任务ID。如果没有,它会查找指定的连接模式,计算任务ID,并在发送元组后将它们返回给用户代码。