我们已经在生产中使用LMAX Disruptor近一年了。一切正常,直到上周我们看到Disruptor发出的消息。我们的Disruptor结构非常简单:

Kafka-> RingBuffer-> Eventhandler1-> Eventhandler2-> Eventhandler3

每个事件处理程序都有一个try-catch块来捕获所有异常。最慢的是Eventhandler2,每个消息花费约3毫秒的时间。

我们向Kafaka发送了53条消息,所有消息均由Eventhandler1处理。但是不知何故,Eventhandler2和Eventhandler3仅收到23条消息,并且在日志中没有看到任何异常。

我们试图在我们的开发环境中重现此问题,但没有看到此问题。

所以我的问题是:

  • Disruptor是否有可能丢弃消息?
  • 如果是,则在什么情况下可能会丢弃消息?
  • 最佳答案

    我在生产和通过负载测试测试环境时遇到了同样的问题。
    如果您有2个或更多并发生产者(环形缓冲区发布者),但是Disruptor是使用ProducerType.SINGLE初始化的,则它可能会掉落或表现为不可预测的。请检查一下。

    ProducerType.MULTI用法示例:

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

    关于disruptor-pattern - 干扰者丢弃消息的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42840223/

    10-12 02:16