【问题标题】:Disruptor behavior - Drain full buffer before consuming new data破坏者行为 - 在使用新数据之前耗尽整个缓冲区
【发布时间】:2020-07-21 12:47:55
【问题描述】:

我有以下场景。

我们在 Cloud on K8s 中对我们的应用程序进行负载测试。我们的入站消息来自 Kafka,我们正在回信给 Kafka。我们的架构是这样的,Kafka 线程将消息推送到中断器(阻塞等待策略,512 大小),业务线程将消息从中断器中取出进行处理。为了模拟负载,我们在应用程序未运行时为 Kafka 主题(4 个分区)准备了接近 500K 的消息。然后我们启动应用程序来测量负载。

我们看到破坏者完全填满,剩余容量为 0,然后开始耗尽,这种情况一遍又一遍地继续。

这是正确的行为还是我们以错误的方式使用破坏者?请分享您的想法?

【问题讨论】:

    标签: java asynchronous apache-kafka disruptor-pattern lmax


    【解决方案1】:

    您应该在将消息排入队列之前启动中断程序。事件一旦发布到环形缓冲区,就会由事件处理程序处理。

    任何时候在环形缓冲区中等待的事件数量将取决于生产者和消费者处理时间之间的不平衡。

    请注意,当环形缓冲区已满时,您将在使用next() 方法在环形缓冲区中声明序列时遇到背压,并且您的生产者线程将被阻塞。

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多