2017-03-16 91 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());