簡體   English   中英

Storm Kafka-Spout無法正常工作

[英]Storm Kafka-Spout not work properly

將軍:我是一名想要在Storm / Kafka / Flink / MS Azure SA / Spark上運行一些性能測試(WordCount)的學生。 我想使用Kafka Broker作為輸入源。

我使用了Storm-Starter項目中的WordCount示例,並添加了Kafka作為spout:

    public class WordCountKafkaTopology {
    public static class SplitSentence extends ShellBolt implements IRichBolt {

        public SplitSentence() {
            super("python", "splitsentence.py");
        }

        @Override
        public void declareOutputFields(OutputFieldsDeclarer declarer) {
            declarer.declare(new Fields("word"));
        }

        @Override
        public Map<String, Object> getComponentConfiguration() {
            return null;
        }
    }

    public static class WordCount extends BaseBasicBolt {
        Map<String, Integer> counts = new HashMap<String, Integer>();

        @Override
        public void execute(Tuple tuple, BasicOutputCollector collector) {
            String word = tuple.getString(0);
            Integer count = counts.get(word);
            if (count == null)
                count = 0;
            count++;
            counts.put(word, count);
            collector.emit(new Values(word, count));
        }

        @Override
        public void declareOutputFields(OutputFieldsDeclarer declarer) {
            declarer.declare(new Fields("word", "count"));
        }
    }

    public static void main(String[] args) {

        String zkIp = "localhost";

        String topicName = "perfTest";

        List<String> nimbus_seeds = new ArrayList<String>();
        nimbus_seeds.add("localhost");

        String zookeeperHost = zkIp +":2181";

        ZkHosts zkHosts = new ZkHosts(zookeeperHost);

        SpoutConfig kafkaConfig = new SpoutConfig(zkHosts, topicName, "/" + topicName, topicName);
        kafkaConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
        KafkaSpout kafkaSpout = new KafkaSpout(kafkaConfig);


        TopologyBuilder builder = new TopologyBuilder();

        builder.setSpout("kafkaPerfTestSpout", kafkaSpout, 8);

        builder.setBolt("split", new SplitSentence(), 8).shuffleGrouping("kafkaPerfTestSpout");
        builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word"));

        Config config = new Config();

        config.setMaxTaskParallelism(5);
        config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 2);
        config.put(Config.NIMBUS_SEEDS, nimbus_seeds);
        config.put(Config.NIMBUS_THRIFT_PORT, 6627);
        config.put(Config.STORM_ZOOKEEPER_PORT, 2181);
        config.put(Config.STORM_ZOOKEEPER_SERVERS, Arrays.asList(zkIp));

        try {
            StormSubmitter.submitTopology("my-kafka-topology", config, builder.createTopology());
        } catch (Exception e) {
            throw new IllegalStateException("Couldn't initialize the topology", e);
        }
    }

}

通過運行topolgy,我得到了幾條錯誤消息。 鯨魚噴水說:

位於kafka.consumer.FetchRequestAndResponseMetrics.newTimer(FetchRequestAndResponseStats.scala:26)的kafka.metrics.KafkaMetricsGroup $ class.newTimer(KafkaMetricsGroup.scala:89)中的java.lang.ExceptionInInitializerError位於kafka.consumer.FetchRequestAndResponseMetrics。(FetchRequestAndResponseStats.scala:35) )at kafka.consumer.FetchRequestAndResponseStats。(FetchRequestAndResponseStats.scala:47)at kafka.consumer.FetchRequestAndResponseStatsRegistry $$ anonfun $ 2.apply(FetchRequestAndResponseStats.scala:60)at kafka.consumer.FetchRequestAndResponseStatsRegistry $$ anonfun $ 2.apply(FetchRequestAndResponseStats.scala) :60)at kafka.utils.Pool.getAndMaybePut(Pool.scala:59)at kafka.consumer.FetchRequestAndResponseStatsRegistry $ .getFetchRequestAndResponseStats(FetchRequestAndResponseStats.scala:64)at kafka.consumer.SimpleConsumer。(SimpleConsumer.scala:44)at kafka .javaapi.consumer.SimpleConsumer。(SimpleConsumer.scala:34)at org.apache.storm.kafka.DynamicPartitionConnections.register(DynamicPartitionConnect) ions.java:60)org.apache.storm.kafka.PartitionManager。(PartitionManager.java:74)org.apache.storm.kafka.ZkCoordinator.refresh(ZkCoordinator.java:98)org.apache.storm。位於org.apache.storm.kafka.KafkaSpout.nextTuple(KafkaSpout:129)的kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69)org.apache.storm.daemon.executor $ fn__7990 $ fn__8005 $ fn__8036.invoke( executor.clj:648)atg.apache.storm.util $ async_loop $ fn__624.invoke(util.clj:484)at java.lang.Thread.run的clojure.lang.AFn.run(AFn.java:22) (Thread.java:745)引起:java.lang.IllegalStateException:在java.lang.Runtime.addShutdownHook(Runtime.java:211)的java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:66)中正在關機com.yammer.metrics.Metrics。(Metrics.java:21)......還有19個

在分裂螺栓:

java.lang.RuntimeException:java.lang.RuntimeException:java.lang.RuntimeException:pid:3973,name:split exitCode:0,errorString:at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:464) org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:430)org.apache.storm.disruptor $ consume_batch_when_available.invoke(disruptor.clj:73)at org.apache.storm.daemon.executor $ fn__8058 $ fn__8071 $ fn__8124.invoke(executor.clj:850)atg.apache.storm.util $ async_loop $ fn__624.invoke(util.clj:484)at clojure.lang.AFn.run(AFn.java:22)at java.lang.Thread.run(Thread.java:745)引起:java.lang.RuntimeException:java.lang.RuntimeException:pid:3973,name:split exitCode:0,errorString:at org.apache.storm.task .shellBolt.execute(ShellBolt.java:150)org.apache.storm.daemon.executor $ fn__8058 $ tuple_action_fn__8060.invoke(executor.clj:731)org.apache.storm.daemon.executor $ mk_task_receiver $ fn__7979.invoke (executor.clj:464)在org.apache.storm.d isrupt. $ clojure_handler $ reify__7492.onEvent(disruptor.clj:40)at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:451)... 6更多引起:java.lang.RuntimeException:pid:3973 ,name:split exitCode:0,errorString:at org.apache.storm.task.ShellBolt.die(ShellBolt.java:295)at org.apache.storm.task.ShellBolt.access $ 400(ShellBolt.java:70)at at org.apache.storm.task.ShellBolt $ BoltWriterRunnable.run(ShellBolt.java:398)... 1更多引起:java.io.IOException:java的java.io.FileOutputStream.writeBytes(Native Method)中的管道損壞位於sun.nio.cs.的java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)的java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)中的.io.FileOutputStream.write(FileOutputStream.java:326) StreamEncoder.implFlush(StreamEncoder.java:297)位於java.io.BuedWriter.flush的java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)的sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) (BufferedWriter.java:25 4)在org.apache.stulti.JsonSerializer.writeMessage(JsonSerializer.java:93)org.apache.storm.multilang.JsonSerializer的org.apache.storm.multilang.JsonSerializer.writeString(JsonSerializer.java:99) .writeBoltMsg(JsonSerializer.java:78)atg.apache.storm.utils.ShellProcess.writeBoltMsg(ShellProcess.java:127)org.apache.storm.task.ShellBolt $ BoltWriterRunnable.run(ShellBolt.java:387)。 ..還有1個

我使用kafka-console-producer來生成一些消息。 我希望有一個人可以幫助我。 我是編程風暴的新秀......

刪除“config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS,2);” 做了這個工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM