通过不同的线程使用Kafka Producer

Bil*_*erg 10 apache-kafka kafka-producer-api

我有基于java的Web应用程序的kafka生产者将消息推送到Kafka.根据文档,我可以看到kafka生产者是线程安全的.这是否意味着我可以拥有Kafka生产者的单个实例,并通过不同的线程(Web请求)使用它们,每个都将在我的情况下打开和关闭生产者.这会产生任何问题吗?或者最好根据请求启动生产者?

Sha*_*Guo 14

是的,KafkaProducer是线程安全的.
请参阅Class KafkaProducer

向Kafka集群发布记录的Kafka客户端.

生产者是线程安全的,通常应该在所有线程之间共享以获得最佳性能.

生产者管理一个后台线程,它执行I/O以及与需要与之通信的每个代理的TCP连接.未能在使用后关闭生产者将泄漏这些资源.

  • @AshikaUmangaUmagiliya 是的,我得出的结论是事务 API 不是线程安全的。事实上,我发现它们的设计做得很差——它们假设了某种消费者线程上下文,而这本来可以通过使用事务句柄来避免。 (3认同)
  • 绝对抛出异常。通常我们使用像spring context这样的微容器,只有在破坏spring context时才关闭kafka consumer。 (2认同)