我们使用messages.Now -kafka-2.2.7.RELEASE来生成和消费KafkaTemplate我的问题是,如果我从同一应用程序生成多个消息,spring是否会打开到代理的多个连接?如果是,我们如何控制连接的no?
发布于 2020-02-12 01:39:32
这取决于;如果您不使用事务,那么默认情况下,所有操作都使用单个共享生产者(这是Kafka javadoc推荐的)。
实际行为由模板使用的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的生产者池用于消费者发起的事务(用于正确的僵尸围栏操作)。
https://stackoverflow.com/questions/60173965
复制相似问题