spring-boot - KafkaTemplate 线程安全吗

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

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

最佳答案

是的,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;

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

如果设计师用信息性的 @ThreadSafe 对其进行注释会更好尽管或至少在类的 JavaDoc 注释中指出了这一点。

关于spring-boot - KafkaTemplate 线程安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42105672/

相关文章:

spring-boot - spring-boot 应用程序的 keep-alive 配置(带有嵌入式 tomcat)

java - Kafka无法更新元数据

java - 如何将多条消息转换为一条消息?

apache-kafka - 是否有 Kafka Producer API 配置来设置主题自动创建?

apache-kafka - Kafka 代理是否为每条消息或每个消息批处理发送 ACK?

tomcat - 如何使用spring boot将根上下文映射到嵌入式tomcat中的webapp上下文

java - 如何通过排除原则从另一个表中过滤选择

spring-boot - Spring Cloud Zuul API 网关不会为无状态 session 转发 JWT token

postgresql - kafka-connect-jdbc 不从源中获取连续的时间戳

node.js - 如何在 Node JS 中向多个 Kafka 主题分区发送数据