【发布时间】:2021-04-13 12:15:27
【问题描述】:
当我尝试从另一个发送的ListenableFutureCallback 中发送消息时,我遇到了生产者超时,但如果我同步等待结果并且不使用回调,则不会发生这种情况。几条消息后,可以看到类似的错误:
...[kafka-producer-network-thread | producer-1] ERROR o.s.k.s.LoggingProducerListener - Exception thrown when sending a message with key='null' and payload='...' to topic ...: org.apache.kafka.common.errors.TimeoutException: Topic ... not present in metadata after 60000 ms.
示例代码如下:
// This produces the TimeoutException
kafkaTemplate.send(producerRecord)
.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
@Override
public void onFailure(Throwable ex) {
kafkaTemplate.send(failureMessage);
}
@Override
public void onSuccess(SendResult<String, String> result) {
kafkaTemplate.send(successMessage); // <- timeout here
}
});
// This does work as expected
kafkaTemplate.send(producerRecord).get();
kafkaTemplate.send(successMessage);
我在文档中没有发现禁止从另一个生产者的回调中生成消息,或者它与其他一些配置有关?
【问题讨论】:
标签: java apache-kafka kafka-producer-api