2017-03-16 94 views
3

我們已經在生產中使用了LMAX干擾器將近一年。直到上週我們看到來自Disruptor的信息丟失時,一切都很好。我們的干擾器的結構是非常簡單的:干擾信號丟失

卡夫卡 - > RingBuffer - > Eventhandler1 - > Eventhandler2 - > Eventhandler3

每個事件處理程序都有一個try-catch塊捕獲所有異常。最慢的是Eventhandler2,每條消息需要大約3毫秒。

我們發送了53條消息給Kafaka,它們全都由Eventhandler1處理。但不知何故,只有23條消息被Eventhandler2和Eventhandler3選中,我們在日誌中沒有看到任何異常。

我們試圖在我們的開發環境中重現這一點,但我們沒有看到這個問題。

所以我的問題是:

  1. 是否有可能干擾物下降的消息?
  2. 如果是,在什麼情況下可能會丟棄消息?

回答

0

同樣的問題,我在生產和負載測試env測試。 如果您有兩個或更多併發生產者(環形緩衝區發行者),但Disruptor使用ProducerType.SINGLE進行初始化,它可能會丟失或表現出不可預測性。請檢查。

ProducerType.MULTI使用例如:

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