如果我从同一应用程序生成多条消息,KafkaTemplate 是否会打开与代理的多个连接?

Would KafkaTemplate open multiple connections to a broker if I produce multiple messages from the same application?

我们正在使用 spring-kafka-2.2.7.RELEASE 来生产和消费 messages.Now 我的问题是,如果我从同一个应用程序?如果是,我们如何控制连接数?

视情况而定;如果您不使用事务,则默认情况下(根据 Kafka javadocs 的建议)使用单个共享生产者进行所有操作。

实际行为由模板使用的 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 的生产者通常用于消费者发起的交易(用于适当的僵尸防护操作)。