KafkaTemplate线程安全吗?

时间:2017-02-08 05:51:57

标签: spring-boot apache-kafka kafka-producer-api

春天启动线程中的KafkaTemplate是否安全。我是否可以创建一个KafkaTemplate并使用它将信息发送到我的Web服务中的多个请求的相同kafka主题。

2 个答案:

答案 0 :(得分:3)

是的,KafkaTemplate旨在确保线程安全。如果查看其source code,您会看到以下成员变量声明:

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;

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

如果设计师使用信息@ThreadSafe对其进行注释,或者至少在课堂上的JavaDoc评论中指出这一点,那就更好了。

答案 1 :(得分:0)

与DefaultKafkaProducerFactory一起使用时,KafkaTemplate完全是线程安全的(请参见KafkaTemplate doc)。

KafkaProducer本身是线程安全的(请参见KafkaProducer doc)。