【问题标题】:Spring Kafka producer not work asynchronousSpring Kafka生产者不能异步工作
【发布时间】:2020-05-19 10:22:18
【问题描述】:

我正在使用非阻塞(异步)向 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);
        }

    });

当发送操作完成它的工作时,这完美地工作。

但是当出现连接问题时(例如服务器宕机),结果变成非异步的,并且该方法保持阻塞状态直到 max.block.ms 的持续时间结束。

【问题讨论】:

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


【解决方案1】:

这在 Async Kafka producer 中很自然。你有两个选择

  1. 要么减少 max.block.ms,但不要减少太多。
  2. 您可以等待确认

也可以为 onCompletion() 创建回调函数

【讨论】:

  • 好心,可以改进你的答案吗?也许只是粘贴一些代码 sn-p 或更多评论。 “等待确认”是什么意思?这是否意味着“反对”异步方法?我正在研究使用异步 Kafka 生产者进行日志记录。您是否遇到过类似的情况并确实应用了一些关于 max.block.ms 的基准?
猜你喜欢
  • 2021-04-23
  • 2018-11-16
  • 1970-01-01
  • 2019-05-09
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
相关资源
最近更新 更多