Storm 운영:nextTuple 에 대하 여
http://blog.itpub.net/29754888/viewspace-1260026/
아침 에 storm 에 문제 가 있 는 것 을 발 견 했 습 니 다.로 그 를 보 니
2015-10-31T20:02:23.332+0800 STDIO [ERROR] java.lang.InterruptedException
2015-10-31T20:02:23.333+0800 STDIO [ERROR] at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
2015-10-31T20:02:23.333+0800 STDIO [ERROR] at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048)
2015-10-31T20:02:23.333+0800 STDIO [ERROR] at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
2015-10-31T20:02:23.333+0800 STDIO [ERROR] at com.hzw.monitor.storm.spout.ActiveMQSpout.nextTuple(ActiveMQSpout.java:45)
2015-10-31T20:02:23.333+0800 STDIO [ERROR] at backtype.storm.daemon.executor$fn__6579$fn__6594$fn__6623.invoke(executor.clj:565)
2015-10-31T20:02:23.334+0800 STDIO [ERROR] at backtype.storm.util$async_loop$fn__459.invoke(util.clj:463)
2015-10-31T20:02:23.334+0800 STDIO [ERROR] at clojure.lang.AFn.run(AFn.java:24)
2015-10-31T20:02:23.334+0800 STDIO [ERROR] at java.lang.Thread.run(Thread.java:745)
그리고 포 지 셔 닝 은 nextTuple 함 수 를 보 는 것 입 니 다.
우리 가 사용 하 는 것 은 링크 드 BlockingQueue 입 니 다.take,이 함 수 를 사 용 했 습 니 다.
Message java.util.concurrent.LinkedBlockingQueue.take() throws InterruptedException
Retrieves and removes the head of this queue, waiting if necessary until an element becomes available.Specified by: take() in BlockingQueueReturns:the head of this queueThrows:InterruptedException - if interrupted while waiting
이 함 수 는 현재 스 레 드 를 막 을 것 입 니 다.
그리고 nextTuple 함수.
/**
* When this method is called, Storm is requesting that the Spout emit tuples to the
* output collector. This method should be non-blocking, so if the Spout has no tuples
* to emit, this method should return. nextTuple, ack, and fail are all called in a tight
* loop in a single thread in the spout task. When there are no tuples to emit, it is courteous
* to have nextTuple sleep for a short amount of time (like a single millisecond)
* so as not to waste too much CPU.
*/
void nextTuple();
그 러 니까 여 기 는 take 로 처리 해 서 는 안 된다 는 거 야.
나중에 poll()로 수정 하여 내 놓 은 메시지 가 null 이면 10ms 를 잔다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
storm Async loop died! & reconnect자세히 보기 storm이 슈퍼바이저가 리셋되었을 때 topology가 오류를 보고하여 모든 spout이 소비되지 않습니다. 로그 위에 대량의reconnection IP에 로그인하여 6703 포트에 두 개의 워커가 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.