KafkaTemplate 线程安全吗

IS_*_*_EV 5 apache-kafka spring-boot kafka-producer-api

Spring Boot 线程中的 KafkaTemplate 是否安全。我可以创建一个 KafkaTemplate 并使用它来将信息发送到同一 kafka 主题,以便在我的 Web 服务中进行多个请求。

Lam*_*bda 6

是的,KafkaTemplate被设计为线程安全的。如果查看其源代码,您会看到以下成员变量声明:

protected final Log logger = LogFactory.getLog(this.getClass()); //NOSONAR

private final ProducerFactory<K, V> producerFactory;

private final boolean autoFlush;

private final boolean transactional;

private final ThreadLocal<Producer<K, V>> producers = new ThreadLocal<>();

private RecordMessageConverter messageConverter = new MessagingMessageConverter();

private volatile String defaultTopic;
Run Code Online (Sandbox Code Playgroud)

ThreadLocalvolatile变量定义来看,你可以推断它是为多线程使用而设计的,因此它必须是线程安全的(如果不是,那么你应该提交错误报告)。

如果设计者用信息注释@ThreadSafe或至少在类的 JavaDoc 注释中指出这一点,那就更好了。