在这里我有逻辑,我使用一个主题(1个分区)中的消息,进行缓慢的计算(可能需要100ms-2sec),然后将结果发送到另一个主题。 我想使用Reactor kafka库并通过使用limitRate方法施加反压力,但是当我要在多个线程上运行计算时,此limitRate不起作用(发送“需求”请求而无需等待计算结束)。我的想法是,当在一个线程中完成工作时,会发出信号,并且订户可以发送对下一条消息的请求。
有人有这样的问题吗?
public void runFlow() {
KafkaSender<String, String> kafkaSender = createKafkaSender();
KafkaReceiver<String, String> kafkaReceiver = createKafkaReceiver();
Scheduler scheduler = Schedulers.newParallel("my-scheduler", 4);
kafkaReceiver
.receiveAtmostOnce()
.log()
.limitRate(2)
.parallel()
.runOn(scheduler)
.map(m -> SenderRecord.create(workerTask.processMessage(m), m.offset()))
.as(kafkaSender::send)
.subscribe();
}
我想实现类似以下情况:
kafkaReceiver
.receiveAtmostOnce()
.log()
.limitRate(2)
//.parallel()
//.runOn(scheduler)
.map(m -> SenderRecord.create(workerTask.processMessage(m), m.offset()))
.as(kafkaSender::send)
.subscribe();
然后,我看到对新消息的请求是在先前的计算完成后发送的。