问题1、拓扑提交后,在storm-ui查看拓扑起来了,但是里面的spout或bolt一个都没有
原因,可能supervisor没起来,或者ui里面看到这个拓扑没有获得资源,worker数量,executor都是0.
需要增加资源,比如内存,让storm supervisor正常运行起来。
问题2、在storm进行local 测试,启动拓扑报错。NoClassDefFoundError:kafka/api/OffsetRequest
原因解决:
If you use LocalCluster deployment a storm topology you need to add the Kafka lib to your dependencies (for Storm 0.10.0):
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.9.2</artifactId>
<version>0.8.1.1</version>
</dependency>
问题3、storm kafka-spout报java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory at org.apache.log4j.Logger.getLogge问题
需要在pom增加一个依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<scope>test</scope>
<version>${slf4j.version}</version>
</dependency>
或者参考:http://weyo.me/pages/techs/kafka-problem-with-log4j/
问题4、storm 的spout有fail现象
默认spout发射出去的tuple,30s以内没有ack回来,就默认是fail了。需要设置spout最大pengding的数量,这样可以减少bolt的压力。
topology.max.spout.pending 的意义在于 ,缓存spout 发送出去的tuple,当下流的bolt还有topology.max.spout.pending 个 tuple 没有消费完时,spout会停下来,等待下游bolt去消费,当tuple 的个数少于topology.max.spout.pending个数时,spout 会继续从消息源读取消息。(这个属性只对可靠消息处理有用)