我有基于java的Web应用程序的kafka生产者将消息推送到Kafka。根据文档,我可以看到kafka生产者是线程安全的。这是否意味着我可以拥有Kafka生产者的单个实例,并通过不同的线程(Web请求)使用它们,每个都将在我的情况下打开和关闭生产者。这会产生任何问题吗?或者最好根据请求启动生产者?
答案 0 :(得分:11)
是的,KafkaProducer是线程安全的 请参阅Class KafkaProducer
向Kafka集群发布记录的Kafka客户端。
生产者是线程安全的,通常应该在所有人之间共享 线程以获得最佳性能。
生产者管理一个执行I / O的后台线程 作为与每个需要进行通信的代理的TCP连接 用。未能在使用后关闭生产者将泄漏这些 资源。
答案 1 :(得分:0)
到目前为止,最好的方法(通常是大多数有状态客户端连接器,例如SQL客户端,弹性搜索客户端等)是在应用程序启动时实例化单个实例并在所有线程之间共享它。它应该只在应用程序关闭时关闭。