Будет ли KafkaTemplate открывать несколько соединений с брокером, если я создаю несколько сообщений из одного приложения? - PullRequest
0 голосов
/ 11 февраля 2020

Мы используем spring-kafka-2.2.7.RELEASE для создания и потребления сообщений. Теперь мой вопрос: откроет ли KafkaTemplate несколько соединений с брокером, если я создаю несколько сообщений из одного и того же приложения? Если да, как мы можем контролировать количество соединений?

1 Ответ

2 голосов
/ 11 февраля 2020

Это зависит; если вы не используете транзакции, для всех операций по умолчанию используется один общий поставщик (в соответствии с рекомендациями Javadocs Kafka).

Фактическое поведение контролируется DefaultKafkaProducerFactory, используемым шаблоном, а не сам шаблон.

С 2.3.x + вы можете создать производителя для потока:

/**
 * Set to true to create a producer per thread instead of singleton that is shared by
 * all clients. Clients <b>must</b> call {@link #closeThreadBoundProducer()} to
 * physically close the producer when it is no longer needed. These producers will not
 * be closed by {@link #destroy()} or {@link #reset()}.
 * @param producerPerThread true for a producer per thread.
 * @since 2.3
 * @see #closeThreadBoundProducer()
 */
public void setProducerPerThread(boolean producerPerThread) {
    this.producerPerThread = producerPerThread;
    this.threadBoundProducers = new ThreadLocal<>();
}

Когда вы используете транзакции, используется либо пул производителей (для инициированных производителем транзакций ) или производитель на group/topic/partition обычно используется для инициируемых потребителем транзакций (для правильной операции зомбирования ie ограждения).

...