"act-6ren">
gpt4 book ai didi

lifecycle - 对于Storm Spouts,何时调用declareOutputFields()?

转载 作者:行者123 更新时间:2023-12-02 23:42:11 25 4
gpt4 key购买 nike

我想知道 Storm Spout 上的各种方法何时被调用。

我看过ISpout javadoc ,这给了我以下思维模型:

"instantiated" -- open(...) -----> "activated"
"activated" -- deactivate() --> "deactivated"
"deactivated" -- activate() ----> "activated"
"activated" -- close() -------> "shutdown"
"deactivated" -- close() -------> "shutdown"

但我不确定何时调用 IComponent.declareOutputFields(...) 。在 open(...) 之前还是之后?何时需要声明输出流和字段?在declareOutputFields(...)内?或者保留对 OutputFieldsDeclarer 的引用并稍后定义它们也可以吗?如果是这样,它可以在单独的线程上吗?

我发现了这个相关问题( Testing Storm Bolts and Spouts ),但答案似乎没有指出任何设计原则或规范。

最佳答案

当客户端代码在 TopologyBuilder 实例上调用 createTopology() 时,会在客户端计算机上调用方法 IComponent.declareOutputFields(...)。请查看 TopologyBuilder.java 中的第 226 行在 Spout 或 Bolt 组件上调用此方法。

回调方法IComponent.declareOutputFields(...)是拓扑生命周期的一部分,而不是Spout或Bolt生命周期的一部分。为了回答您的问题,此方法在 open() 方法之前调用。

输出字段应在 declareOutputFields() 方法中声明,以便 Storm 序列化 Spout/Bolt 对象(包括配置和输出字段)。 Spout/Bolt 的序列化实例随后被提交到 Storm 集群,之后 Spout/Bolt 的其他生命周期方法(activate()open() 等)将被提交到 Storm 集群。博尔特被称为。

关于lifecycle - 对于Storm Spouts,何时调用declareOutputFields()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com