Я немного озадачен рекомендациями по настройке тайм-аута события, публикуемого синхронно через Spring Kafka. В документации Spring Kafka приведен пример использования ListenableFuture
get(SOME_TIME, TimeUnit)
для включения синхронная публикация событий с таймаутом SOME_TIME
. (дублируется ниже для справки).
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 и увидел, что у Kafka была конфигурация для request.timeout.ms
, которая отвечала за настройку ниже в Kafka.
Конфигурация контролирует максимальное количество времени, которое клиент будет ожидать ответа на запрос. Если ответ не получен до истечения времени ожидания, клиент при необходимости повторно отправит запрос или не выполнит запрос, если повторные попытки исчерпаны.
Будет ли разумнее настроить template.send(...).get(...)
с некоторой единицей времени (например, 10 секунд / 10000 мс, как указано в примере из Spring Kafka выше), или лучше будет настроить request.timeout.ms
(вдоль с retries
), чтобы эмулировать это поведение внутри Kafka и сделать вызов без аргументов к get()
?