Apache storm Apache storm Spoot的发射速度快于Bolt计算,导致ConcurrentModificationException

Apache storm Apache storm Spoot的发射速度快于Bolt计算,导致ConcurrentModificationException,apache-storm,concurrentmodification,Apache Storm,Concurrentmodification,这是我的情况。我有一个卡夫卡喷口,喷口每秒发出一个元组。螺栓将连接到Rserve,需要大约5秒钟来计算结果,然后发出一个元组。 但是螺栓总是得到一致的修改例外,然后工人就死了 public class LagBolt extends BaseRichBolt { OutputCollector _collector; public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputColl

这是我的情况。我有一个卡夫卡喷口,喷口每秒发出一个元组。螺栓将连接到Rserve,需要大约5秒钟来计算结果,然后发出一个元组。 但是螺栓总是得到一致的修改例外,然后工人就死了

public class LagBolt extends BaseRichBolt {

OutputCollector _collector;

public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
    _collector = outputCollector;
}

public void execute(Tuple tuple) {
    List<Pair> pairs = (List<Pair>) tuple.getValueByField("pairs");
    double[] value = new double[pairs.size()];
    for (int i = 0; i < pairs.size(); i++) {
        value[i] = pairs.get(i).getValue();
    }

    Model model = new Model();
    RConnection rConnection = new RserveConnection().getrConnection();

    // the test() and estimate() need about five seconds to compute
    int d = model.test(rConnection, value);
    int[] ap = model.estimate(rConnection, value, d);
    List<Parameter> parameters = delegate(ap, d);
    rConnection.close();

    _collector.emit(tuple, new Values(parameters));
    _collector.ack(tuple);
}

public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declare(new Fields("parameters"));
}

private List<Parameter> delegate(int[] ap, int d){
    int apNum = ap[0];
    List<Parameter> parameters = new ArrayList<Parameter>();

    for(int i = 1; i < 1+apNum; i++){
        for(int j = apNum+1; j < ap.length; j++){
            Parameter parameter = new Parameter(ap[i], d, ap[j]);
            parameters.add(parameter);
        }
    }

    return parameters;
}
public类LagBolt扩展了BaseRichBolt{
输出采集器_采集器;
公共空白准备(地图地图、拓扑上下文、拓扑上下文、OutputCollector OutputCollector){
_收集器=输出收集器;
}
公共void执行(元组){
列表对=(列表)tuple.getValueByField(“对”);
double[]值=新的double[pairs.size()];
对于(int i=0;i
这是个例外

379632[Thread-14-Lag]错误b.s.util-异步循环终止! java.lang.RuntimeException:java.util.ConcurrentModificationException 在backtype.storm.utils.DisruptorQueue.ConsumerBatchToCursor(DisruptorQueue.java:135)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.utils.DisruptorQueue.ConsumerBatchWhenAvailable(DisruptorQueue.java:106)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.disruptor$consume\u batch\u可用时调用(disruptor.clj:80)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.daemon.executor$fn_u5694$fn_u5707$fn_u5758.invoke(executor.clj:819)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.util$async\u循环$fn\uu 545.invoke(util.clj:479)[storm-core-0.10.0.jar:0.10.0] 在clojure.lang.AFn.run(AFn.java:22)[clojure-1.6.0.jar:?] 在java.lang.Thread.run(Thread.java:745)[?:1.7.091] 原因:java.util.ConcurrentModificationException 在java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)~[?:1.7.091] 在java.util.ArrayList$SubList.listIterator(ArrayList.java:1049)~[?:1.7.091] 在java.util.AbstractList.listIterator(AbstractList.java:299)~[?:1.7.091] 在java.util.ArrayList$SubList.iterator(ArrayList.java:1045)~[?:1.7.091] 在java.util.AbstractCollection.toString(AbstractCollection.java:450)~[?:1.7.091] 在java.lang.String.valueOf(String.java:2849)~[?:1.7.0_91] 在java.lang.StringBuilder.append(StringBuilder.java:128)~[?:1.7.091] 在java.util.AbstractCollection.toString(AbstractCollection.java:458)~[?:1.7.091] 在backtype.storm.tuple.TupleImpl.toString(TupleImpl.java:222)~[storm-core-0.10.0.jar:0.10.0] 在clojure.core$str.invoke(core.clj:520)~[clojure-1.6.0.jar:?] 在clojure.core$str$fn_u3928.invoke(core.clj:524)~[clojure-1.6.0.jar:?] 在clojure.core$str.doInvoke(core.clj:526)~[clojure-1.6.0.jar:?] 在clojure.lang.RestFn.invoke(RestFn.java:516)~[clojure-1.6.0.jar:?] 在backtype.storm.daemon.executor$fn\u 5694$tuple\u action\u fn\u 5696.invoke(executor.clj:693)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.daemon.executor$mk\u task\u receiver$fn\u 5615.invoke(executor.clj:436)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.disruptor$clojure\u handler$reify\u 5189.onEvent(disruptor.clj:58)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.utils.DisruptorQueue.ConsumerBatchToCursor(DisruptorQueue.java:132)~[storm-core-0.10.0.jar:0.10.0] …还有6个 379677[Thread-14-Lag]错误b.s.d.执行器- java.lang.RuntimeException:java.util.ConcurrentModificationException 在backtype.storm.utils.DisruptorQueue.ConsumerBatchToCursor(DisruptorQueue.java:135)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.utils.DisruptorQueue.ConsumerBatchWhenAvailable(DisruptorQueue.java:106)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.disruptor$consume\u batch\u可用时调用(disruptor.clj:80)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.daemon.executor$fn_u5694$fn_u5707$fn_u5758.invoke(executor.clj:819)~[storm-core-0.10.0.jar:0.10.0] 在backtype.storm.util$async\u循环$fn\uu 545.invoke(util.clj:479)[storm-core-0.10.0.jar:0.10.0] 在clojure.lang.AFn.run(AFn.java:22)[clojure-1.6.0.jar:?] 在java.lang.Thread.run(Thread.java:745)[?:1.7.091] 原因:java.util.ConcurrentModificationException 在java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)~[?:1.7.091] 在java.util.ArrayList$SubList.listIterator(ArrayList.java:1049)~[?:1.7.091] 在java.util.AbstractList.listIterator(AbstractList.java:299)~[?:1.7.091] 在java.util.ArrayList$SubList.iterator(ArrayList.java:1045)~[?:1.7.091] 在java.util.AbstractCollection.toString(AbstractCollection.java:450)~[?:1.7.091] 在java.lang.String.valueOf(String.java:2849)~[?:1.7.0_91] 在java.lang.StringBuilder.append(StringBuilder.java:128)~[?:1.7.091] 在java.util.AbstractCollection.toString(AbstractCollection.java:458)~[?:1.7.091] 在backtype.storm.tuple.TupleImpl.toString(TupleImpl.java:222)~[storm-core-0.10.0.jar:0.10.0] 在clojure.core$str.invoke(cor