Apache Storm Multilang:ReadTasksIds 的用途

Apache Storm Multilang: Purpose of ReadTasksIds

我一直在尝试将 Storm 的多语言协议用于一个项目。我通读了 protocol 并且在很大程度上它是有道理的。查看 python multilang 源代码,我注意到在发出元组后的 emit 方法中,它调用了 readTaskIds() 方法。

def emit(*args, **kwargs):
    __emit(*args, **kwargs)
    return readTaskIds()

concepts page, it mentions that using directGrouping() you are able to send your output to a specific task. And lines 124-129 of JsonSerializer(处理多语言通信)上,它正在检查 "need_task_ids" 字段是否存在,并且仅当它在 [=23= 中被定义为 false 时才会发送任务 ID ].

所以我想知道是否有人可以 explain/confirm 告诉我为什么 Storm 需要 TasksId? multilang 协议中没有任何内容提及它。它是否仅适用于想要使用 directGrouping() 将元组发送到特定任务的用例?或者拥有它有什么好处吗?在我的 json 中添加一个 "need_task_ids" 字段可以很容易地阻止这种情况发生(如果我理解正确的话),但我不知道这样做是否有任何缺点?

我不熟悉 multilang 协议。但是,你的解释符合我使用Storm低级的经验Java API。在此 API 中,您要么在直接流的情况下指定任务 ID,要么在其他分组(例如随机播放、字段、全部)的情况下不指定任务 ID。因此,我声称您自己的解释是正确的。我也知道一些内部 Clojure 代码做完全相同的事情:它检查是否提供了任务 ID。如果不是,它会查找指定的连接模式,计算任务 ID,并在发送元组后 returns 将它们发送给用户代码。