Spring Kafka生产者无法异步工作

时间:2020-02-03 16:09:35

标签: java spring-boot asynchronous apache-kafka kafka-producer-api

我正在使用非阻塞(异步)方式向Kafka发送消息:

    ListenableFuture<SendResult<Integer, String>> future = template.send(record);
    future.addCallback(new ListenableFutureCallback<SendResult<Integer, String>>() {

        @Override
        public void onSuccess(SendResult<Integer, String> result) {
            handleSuccess(data);
        }

        @Override
        public void onFailure(Throwable ex) {
            handleFailure(data, record, ex);
        }

    });

当send操作完成工作时,此功能非常完美。

但是,如果出现连接问题(例如服务器关闭),结果将变为非异步,并且该方法将一直处于阻塞状态,直到max.block.ms持续时间结束为止。

1 个答案:

答案 0 :(得分:2)

这在异步KAfka生产者中很自然。您有两个选择

  1. 要么减少max.block.ms,要么不要减少太多。
  2. 您可以等一下

您还可以为onCompletion()创建一个回调函数