3

我正在尝试在 https://github.com/TheHydroImpulse/storm-kafka-starter编译和运行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 库。我无法弄清楚错误的原因。任何建议,将不胜感激。

4

5 回答 5

3

我在使用 Apache Storm 的 0.9.2_incubating 版本时遇到了类似的问题。

该问题是由于实际的storm发行版在/lib文件夹中没有kafka库引起的。我能够通过将以下库(用于编译和构建拓扑)复制到 /lib 文件夹来解决错误,从该文件夹中运行 Storm

  • storm-kafka-0.9.2-incubating.jar
  • kafka_2.10-0.8.1.1.jar
  • scala-library-2.10.1.jar

请记住,您的实际版本可能会有所不同。取你用来构建你的风暴拓扑的那些(即来自 .m2 或 .gradle 依赖项文件夹)

注意:我没有使用上面提到的完全相同的启动项目,但修复将是相似的。

于 2014-11-25T20:46:32.330 回答
1

我浏览了storm-user组和storm-kafka-starter github页面上的问题。事实证明,错误是由于两个原因:

  1. Storm、kafka和kafka-storm版本之间的版本不兼容
  2. 类路径上缺少 jar

即使在 /storm/lib 文件夹中包含所有必要的依赖项 jar 后,我的初始设置也无法正常工作。原来提到的storm-kafka-starter项目仅适用于storm 0.9.x版本。

另请参阅此处的帖子,了解哪种设置效果最好 - https://groups.google.com/d/msg/storm-user/V_j_JZmFsb4/E4_II9ork3UJ

于 2013-07-26T13:07:29.480 回答
1

我经历了同样的整合困境。终于有了一个工作示例。

欢迎您在这里查看> https://github.com/buildlackey/cep

(单击storm+kafka 目录可以找到一个可以帮助你启动并运行的示例程序)。

于 2013-10-25T22:00:26.117 回答
0

我未能使用来纠正 Maven 构建命令。使用

mvn clean install assembly:assembly

并使用带有依赖项的 jar 来修复它。

于 2013-10-29T10:03:22.773 回答
0

将 pom.xml 从

<dependency>
   <groupId>org.apache.storm</groupId>
   <artifactId>storm-kafka</artifactId>
   <version>1.0.2</version>
   <scope>provided</scope>
</dependency>

 <dependency>
   <groupId>org.apache.storm</groupId>
   <artifactId>storm-kafka</artifactId>
   <version>1.0.2</version>
</dependency>

现在它对我有用!

于 2017-01-30T11:39:49.253 回答