我正在尝试在风暴clustre上部署一个简单的字数拓扑。我使用kafka作为输入(kafka Spout)。这是我得到的错误
java.lang.NoClassDefFoundError:无法在kafka.utils.Logging $ class.logger(logging。)的org.apache.log4j.Logger.getLogger(Logger.java:39)中初始化类org.apache.log4j.Log4jLoggerFactory。 scala:24)at kafka.consumer.SimpleConsumer.logger $ lzycompute(SimpleConsumer.scala:30)at kafka.consumer.SimpleConsumer.logger(SimpleConsumer.scala:30)at kafka.utils.Logging $ class.info(Logging.scala :67)at kafka.consumer.SimpleConsumer.info(SimpleConsumer.scala:30)at kafka.consumer.SimpleConsumer.liftedTree1 $ 1(SimpleConsumer.scala:74)at kafka.consumer.SimpleConsumer.kafka $ consumer $ SimpleConsumer $$ sendRequest( SimpleConsumer.scala:68)at kafka.consumer.SimpleConsumer.getOffsetsBefore(SimpleConsumer.scala:127)at kafka.javaapi.consumer.SimpleConsumer.getOffsetsBefore(SimpleConsumer.scala:79)at storm.kafka.KafkaUtils.getOffset(KafkaUtils.java :77)在storm.kafka.Kafka.PartitionManager上的storm.kafka.KafkaUtils.getOffset(KafkaUtils.java:67)。(PartitionManager.java:83)at storm.kafka.ZkCoordinator.refresh (ZkCoordinator.java:98)在storm.kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69)at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:135)at backtype.storm.daemon.executor $ fn__4654 $ fn__4669 $ fn__4698.invoke(executor.clj:565)位于java.lang.Thread的clojure.lang.AFn.run(AFn.java:24)的backtype.storm.util $ async_loop $ fn__458.invoke(util.clj:463) .RUN(Thread.java:745)
答案 0 :(得分:2)
通过在我的风暴库中添加log4j-over-slf4j-1.6.6.jar来解决这个问题。
答案 1 :(得分:1)
我正在使用
使用风暴0.9.6,它使用slf4j。所以你需要从你的kafka引用中排除它并包含log4j。以下是我的pom.xml
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.9.0.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<!--<exclusion>-->
<!--<groupId>log4j</groupId>-->
<!--<artifactId>log4j</artifactId>-->
<!--</exclusion>-->
</exclusions>
</dependency>