我正在尝试编译并运行storm-kafka-starter项目 https://github.com/TheHydroImpulse/storm-kafka-starter
KafkaTopology的主要功能如下:
public class KafkaTopology {
public static void main(String[] args) throws Exception {
List<String> hosts = new ArrayList<String>();
hosts.add("localhost");
SpoutConfig kafkaConf = new SpoutConfig(StaticHosts.fromHostString(hosts,1),
"test-topic","/kafkastorm","discovery");
kafkaConf.scheme = new SchemeAsMultiScheme(new StringScheme());
kafkaConf.forceStartOffsetTime(-2);
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", kafkaSpout, 2);
builder.setBolt("printer", new PrinterBolt()).shuffleGrouping("spout");
Config config = new Config();
config.setDebug(true);
if(args!=null && args.length > 0) {
config.setNumWorkers(3);
StormSubmitter.submitTopology(args[0], config, builder.createTopology());
}
else {
config.setMaxTaskParallelism(3);
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("kafka", config, builder.createTopology());
Thread.sleep(10000);
cluster.shutdown();
}
}
}
jar使用maven编译。但是在运行拓扑时,我收到错误:
Exception in thread "main" java.lang.NoClassDefFoundError:
storm/kafka/KafkaConfig$BrokerHosts
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2451)
at java.lang.Class.getMethod0(Class.java:2694)
at java.lang.Class.getMethod(Class.java:1622)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: storm.kafka.KafkaConfig$BrokerHosts
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 6 more
本地存储库确实在storm-kafka jar中有BrokerHosts,我已经在我的java文件中导入了KafkaConfig库。我无法弄清楚错误的原因。任何建议,将不胜感激。
答案 0 :(得分:3)
我使用0.9.2_cububating版本的Apache Storm遇到了类似的问题。
引起的问题是因为实际的风暴分布在/ lib文件夹中没有kafka库。我能够通过将以下库(我用来编译和构建拓扑)复制到我运行Storm的/ lib文件夹来解决错误
请记住,您案例中的实际版本可能会有所不同。拿你用来构建风暴拓扑的那些(即来自.m2或.gradle依赖文件夹)
注意:我没有使用上面提到的完全相同的启动项目,但修复程序类似。
答案 1 :(得分:1)
我经历了风暴用户组和storm-kafka-starter github页面上的问题。事实证明,错误是由于两个原因造成的:
即使在/ storm / lib文件夹中包含所有必需的依赖项jar,我的初始设置也无法正常工作。事实证明,提到的storm-kafka-starter项目仅适用于风暴0.9.x版本。
另请参阅此处的帖子,了解哪种设置效果最佳 - https://groups.google.com/d/msg/storm-user/V_j_JZmFsb4/E4_II9ork3UJ
答案 2 :(得分:1)
我经历了同样的整合困境。最后得到了一个有效的例子。
欢迎您在此处查看&gt; https://github.com/buildlackey/cep
(点击storm + kafka目录,查看应该启动并运行的示例程序。)
答案 3 :(得分:0)
我无法使用正确的maven构建命令。使用
mvn clean install assembly:assembly
并使用带有依赖关系的jar来形成它。
答案 4 :(得分:0)
从
更改了pom.xmlcustomer total_likes
1 2
2 1
3 1
到
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-kafka</artifactId>
<version>1.0.2</version>
<scope>provided</scope>
</dependency>
现在它适合我!