max.in.flight.requests.per.connection和spring kafka producer使用kafkatemplate同步事件发布

wpcxdonn  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(492)

我对他们之间的关系有点困惑 max.in.flight.requests.per.connection 对于Kafka制作人和同步发布的事件,使用的是SpringKafka,并希望有人能够澄清两者之间的关系。
我希望使用springkafka的 KafkaTemplate . SpringKafka文档提供了一个使用 ListenableFutureget(SOME_TIME, TimeUnit) 启用事件的同步发布(下面复制以供参考)。

public void sendToKafka(final MyOutputData data) {
    final ProducerRecord<String, String> record = createRecord(data);

    try {
        template.send(record).get(10, TimeUnit.SECONDS);
        handleSuccess(data);
    }
    catch (ExecutionException e) {
        handleFailure(data, record, e.getCause());
    }
    catch (TimeoutException | InterruptedException e) {
        handleFailure(data, record, e);
    }
}

我在看Kafka的producer配置文档,发现Kafka有一个 max.in.flight.requests.per.connection ,负责Kafka的以下设置。
在阻塞之前,客户端将在单个连接上发送的最大未确认请求数。请注意,如果将此设置设置为大于1并且存在失败的发送,则存在由于重试而导致消息重新排序的风险(即,如果启用了重试)。
价值是什么 max.in.flight.requests.per.connection 当异步处理事件发布时,是否将give设置为值1 give?是否设置 max.in.flight.requests.per.connection 对于Kafka制作人来说,强制同步发布事件的值是1?如果我想为Kafka制作人设置事件的同步发布,并采用SpringKafka推荐的方法,我应该关心吗 max.in.flight.requests.per.connection 还是可以忽略这一点?

b4wnujal

b4wnujal1#

我认为他们一点关系都没有。发送仍然是异步的;将其设置为1意味着第二个将阻塞,直到第一个完成。

future1 = template.send(...);
 future2 = template.send(...); // this will block
 future1.get(); // and this will return almost immediately
 future2.get();

你仍然需要得到未来的结果,来测试成功/失败。

相关问题