1、Thread-4-kafkaSpout-EventThread线程处于长时间等待状态,是正常行为,该线程的作用:
一开始就进入无限循环,从队列waitingEvents中获取事件,如果没有就阻塞等待
2、Thread-4-kafkaSpout-SendThread,该线程的作用:
是个IO线程,用于发起和接受请求,并处理相应,同时产生心跳信息
3、Thread-4-kafkaSpout,接受kafka的消息的线程,多数处于运行状态,偶尔处于等待状态原因是zk的问题:
"Thread-4-kafkaSpout" - Thread t@65
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <27aa1748> (a org.apache.zookeeper.ClientCnxn$Packet)
at java.lang.Object.wait(Object.java:503)
at org.apache.zookeeper.ClientCnxn.submitRequest(ClientCnxn.java:1342)
at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1153)
at org.apache.curator.framework.imps.GetDataBuilderImpl$4.call(GetDataBuilderImpl.java:302)
at storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:68)
at storm.kafka.ZkCoordinator.refresh(ZkCoordinator.java:79)
at storm.kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69)
at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:134)
4、多数业务处理的bolt都是处于阻塞状态,上面只列举两个:
"Thread-8-CleanLogJsErrorBolt" - Thread t@69
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <5433050b> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2176)
at com.lmax.disruptor.BlockingWaitStrategy.waitFor(BlockingWaitStrategy.java:87)
at com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:54)
at backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:97)
at backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:80)
at backtype.storm.daemon.executor$fn__4369$fn__4381$fn__4428.invoke(executor.clj:748)
at backtype.storm.util$async_loop$fn__464.invoke(util.clj:463)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:745)
disruptor是storm线程通讯的工具,有五种等待策略,storm采用BlockingWaitStrategy策略,如何申请消费序列大于当前发布到的序列,则等待新的消息发布,也就是说生产者没有消息发布,有两种可能原因导致:一消费者太快,二生产者根本没有消息过来,所以一直阻塞