我想使用tranquility 及其Storm Bolt将数据发送到druid。所以我编写了一个风暴拓扑(依赖于宁静)并将其编译为jar文件,然后使用run storm在本地模式下使用该jar文件。然而我遇到了一些问题:暴风雨表明并没有错,德鲁伊的霸主节点没有任何记录。我觉得霸主没有收到暴风雨发送的数据。
我想找出问题所在。我确实启用了风暴配置的调试
conf.setDebug(true);
但它只显示了每个spout
和bolt
的详细信息,但未显示tranquility
的调试日志信息。我尝试将风暴logback/cluster.xml
改为
<root level="DEBUG">
<appender-ref ref="A1"/>
</root>
但它似乎不起作用。我尝试在项目的顶级目录中添加log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
它也不起作用。
我在宁静的源代码中挖掘,看到宁静取决于依赖于log4j的ladylog库,所以我认为在项目中添加log4j.xml将启用调试模式并且可以看到调试输出this BeamBot
我完全感到困惑,因为现在我写了一个使用安静库的jar,它使用loglady库,使用log4j和我使用logback的风暴运行的jar。有人能给我一些建议吗?
答案 0 :(得分:0)
然后在本地模式下使用该jar文件运行storm
由于您以本地模式运行jar文件,因此修改logback/cluster.xml
没有意义。通常,除非您在拓扑中手动更改配置,否则Storm将在本地模式下从特定依赖项(如storm-core-0.9.4.jar
)读取默认配置。您应该在群集模式下运行拓扑以尝试。
另一方面,由于log4j存在许多冲突问题,我们使用slf4j
作为log4j的默认库,就像这样
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyBolt {
private static final Logger LOG = LoggerFactory
.getLogger(MyBolt.class);
}
并排除所有其他log4j库中的所有依赖项,例如
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.1</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
希望这有帮助。