我们已经在生产中使用LMAX Disruptor近一年了。一切正常,直到上周我们看到Disruptor发出的消息。我们的Disruptor结构非常简单:
Kafka-> RingBuffer-> Eventhandler1-> Eventhandler2-> Eventhandler3
每个事件处理程序都有一个try-catch块来捕获所有异常。最慢的是Eventhandler2,每个消息花费约3毫秒的时间。
我们向Kafaka发送了53条消息,所有消息均由Eventhandler1处理。但是不知何故,Eventhandler2和Eventhandler3仅收到23条消息,并且在日志中没有看到任何异常。
我们试图在我们的开发环境中重现此问题,但没有看到此问题。
所以我的问题是:
最佳答案
我在生产和通过负载测试测试环境时遇到了同样的问题。
如果您有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/