Zookeeper 多次执行制备方法

5fjcxozz  于 2022-12-09  发布在  Apache
关注(0)|答案(1)|浏览(149)

嗨,我正在使用apache-storm创建一个拓扑结构,其中我的Spout正在从Kakfa Topic收集数据并将其发送到一个螺栓。
我正在对元组进行一些验证,并再次为其他螺栓发出流。
现在的问题是,我的第二个螺栓,这是使用流的第一个螺栓有一个重载方法prepare(Map<String, Object> map, TopologyContext topologyContext, OutputCollector outputCollector),这是执行后,让我们说每2秒。
拓扑代码为

topologyBuilder.setBolt("abc",new ValidationBolt()).shuffleGrouping(configurations.SPOUT_ID);

topologyBuilder.setBolt("TEST",new TestBolt()).shuffleGrouping("abc",Utils.VALIDATED_STREAM);

第一个螺栓“abc”的代码为

@Override
    public void execute(Tuple tuple) {
        String document = String.valueOf(tuple.getValue(4));
        if (Utils.isJSONValid(document)) {
            outputCollector.emit(Utils.VALIDATED_STREAM,new Values(document));
        }
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
        outputFieldsDeclarer.declareStream(Utils.VALIDATED_STREAM,new Fields("document"));
    }

当我寻找的时候我发现

The prepare method is called when the bolt is initialised and is 
similar to the open method in spout. It is called only once for the bolt.
It gets the configuration for the bolt and also the context of the bolt. 
The collector is used to emit or output the tuples from this bolt.

日志Storm topology log的公共要点链接

uhry853o

uhry853o1#

您的日志显示您正在使用LocalCluster。它是一个测试/演示工具,不要将其用于生产负载。请设置一个真实的的分布式集群。
关于正在发生的事情:
当您在LocalCluster中运行拓扑时,Storm通过在单个JVM中将所有组件(Nimbus、Supervisor和worker)作为线程运行来模拟真实的的集群。您的日志显示以下行:
20:14:12.451 [SLOT_1027]信息o.a.s.过程模拟器-开始终止过程2 ea 97301 - 24 c9 - 4c 1a-bcba-61008693971 a
20:14:12.451 [SLOT_1027]信息o.a.s.d.w.工作进程-正在关闭工作进程智能事务数据-1-1566571315 72 bbf 510-c342-4385-9599- 0821 a2 dee 94 e 1027
20:14:15.518 [SLOT_1027]信息o.a.s.d.s.插槽状态运行msInState:33328拓扑:智能事务性数据-1 -1566571315工作进程:2 ea 97301 - 24 c9 - 4c 1a-bcba-61008693971 a-〉删除二进制大对象更新msInState:3001拓扑:智能事务处理数据-1 -1566571315工作进程:2 ea 97301 - 24 c9 - 4c 1a-bcba-61008693971 a
20:14:15.540 [SLOT_1027]信息o.a.s.d.w.工作进程-启动智能事务数据的工作进程-1-1566571315
LocalCluster正在关闭其中一个仿真的工作者,因为其中一个Blob(例如,拓扑jar、拓扑配置、其他类型的共享文件,更多信息请参见https://storm.apache.org/releases/2.0.0/distcache-blobstore.html)。通常情况下,当在真实的集群中发生这种情况时,工作JVM将被终止,blob将被更新,工作将重新启动。由于您使用的是LocalCluster,它只是终止工作线程并重新启动它,这就是为什么您会看到多次调用prepare

相关问题