过去两天,我一直想在拓扑中实现KafkaSpout。这里 是一些重要的信息。
所有三项服务都在同一个实例上运行。 Kafka的经纪人默认使用9092
端口,advertised.listeners
设置为PLAINTEXT://localhost:9092
。 Zookeeper,使用默认值
客户端端口2181.而Storm Nimbus主机名也已设置为localhost。
自定义Kafka Producer成功创建日志消息,而使用zkCli Zookeeper脚本我看过使用/ brokers路径时,分区和其他相关的 信息存储正确。
但是,我在激活时不断收到错误,然后监视拓扑。 以下是我实现的Storm拓扑的源代码:
BrokerHosts hosts = new ZkHosts("127.0.0.1:2181");
SpoutConfig spoutConfig = new SpoutConfig(hosts, "bytes", "/kafkastorm/", "bytes" + UUID.randomUUID().toString());
spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
spoutConfig.zkServers = Arrays.asList("127.0.0.1");
spoutConfig.zkPort = 2181;
KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("bytes", kafkaSpout);
builder.setBolt("byteSize", new KafkaByteProcessingBolt()).shuffleGrouping("bytes");
StormTopology topology = builder.createTopology();
Config config = new Config();
StormSubmitter.submitTopology("topology", config, topology);
但是,执行bin/storm monitor <topology_name> -m bytes
时我遇到的错误消息如下:
Exception in thread "main" java.lang.IllegalArgumentException: stream: default not found
at org.apache.storm.utils.Monitor.metrics(Monitor.java:223)
at org.apache.storm.utils.Monitor.metrics(Monitor.java:159)
at org.apache.storm.command.monitor$_main.doInvoke(monitor.clj:36)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at org.apache.storm.command.monitor.main(Unknown Source)
通过检查worker的日志(worker.log文件),我得出结论 KafkaSpout在open()方法上失败。
java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy
at org.apache.storm.kafka.KafkaSpout.open(KafkaSpout.java:75) ~[storm-kafka-1.0.2.jar:1.0.2]
at org.apache.storm.daemon.executor$fn__7990$fn__8005.invoke(executor.clj:604) ~[storm-core-1.0.2.jar:1.0.2]
at org.apache.storm.util$async_loop$fn__624.invoke(util.clj:482) [storm-core-1.0.2.jar:1.0.2]
at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
Caused by: java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_101]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_101]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_101]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_101]
... 5 more
有人可以解释一下KafkaSpout失败的原因可能是什么 open()方法?
我真的很感谢你的帮助!
答案 0 :(得分:0)
从错误“java.lang.NoClassDefFoundError:org / apache / curator / RetryPolicy”看来curator-client.jar缺失。
请检查以下链接是否有帮助?