2017-03-16 4 views
3

우리는 거의 1 년 동안 생산에서 LMAX Disruptor를 사용 해왔다. 지난 주까지 Disruptor에서 메시지가 떨어질 때까지 모든 것이 잘되었습니다. 우리 스럽 구조가 매우 간단합니다 :Disruptor dropped message issue

카프카 -> RingBuffer -> Eventhandler1 -> Eventhandler2 -> Eventhandler3

각 이벤트 핸들러는 모든 예외를 잡기 위해 try-catch 블록을 가지고있다. 가장 느린 이벤트 처리기 2는 각 메시지에 ~ 3 밀리 초가 걸립니다.

우리는 Kafaka에 53 개의 메시지를 보냈습니다. 모두가 Eventhandler1에 의해 처리되었습니다. 그러나 어떻게 든 Eventhandler2와 Eventhandler3에 의해 23 개의 메시지가 선택되었고 로그에는 예외가 표시되지 않았습니다.

개발 환경에서이 문제를 재현하려고했지만이 문제가 발생하지 않았습니다.

그래서 제 질문은 다음과 같습니다 스럽 메시지를 삭제하는

  1. 이 가능합니까?
  2. 예인 경우 어떤 조건에서 메시지가 삭제 될 수 있습니까?

답변

0

로드 테스트로 생산 및 테스트에서 동일한 문제가 발생했습니다. 두 개 이상의 동시 생성자 (링 버퍼 게시자)가 있지만 Disruptor가 ProducerType.SINGLE로 초기화되는 경우 예상치 못한 결과가 발생할 수 있습니다. 그것을 확인하십시오.

ProducerType.MULTI 사용 예 :

Disruptor<CustomEvent> disruptor = new Disruptor<CustomEvent>(eventFactory, bufferSize, executor, ProducerType.MULTI, new BlockingWaitStrategy());