2017-03-16 5 views
3

我々は、LMAX Disruptorを生産に1年近く使用しています。私たちがDisruptorから落とされたメッセージを見たとき、先週まですべてがうまくいっていました。私たちのかく乱構造が非常に簡単です:Disruptor dropping message issue

カフカ - >リングバッファ - > Eventhandler1 - > Eventhandler2 - > Eventhandler3

各EventHandlerはすべての例外をキャッチするtry-catchブロックを持っています。最も遅いイベントハンドラ2は、各メッセージに対して約3ミリ秒かかります。

私たちはKafakaに53のメッセージを送りました、それらはすべてEventhandler1によって処理されました。しかし、何らかの形で、Eventhandler2とEventhandler3によって23件のメッセージしか取得されておらず、ログには例外が表示されませんでした。

開発環境でこれを再現しようとしましたが、この問題はありませんでした。

は、だから私の質問は以下のとおりですかく乱がメッセージをドロップするため

  1. が可能ですか?
  2. 「はい」の場合、どのような条件でメッセージが削除される可能性がありますか?

答えて

0

同じ問題が製造時と負荷テスト時にenvでテストしました。 2つ以上のコンカレントプロデューサ(リングバッファパブリッシャ)があり、DisruptorがProducerType.SINGLEで初期化されている場合は、予測できない動作をする可能性があります。それを確認してください。

ProducerType.MULTI使用例:

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