Это зависит; если вы не используете транзакции, для всех операций по умолчанию используется один общий поставщик (в соответствии с рекомендациями 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 ограждения).