17

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

4

2 回答 2

20

是的,KafkaProducer 是线程安全的。
参考KafkaProducer 类

将记录发布到 Kafka 集群的 Kafka 客户端。

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

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

于 2016-03-24T05:27:39.820 回答
3

到目前为止,最好的方法(这是大多数有状态客户端连接器的典型方法,例如 SQL 客户端、elasticsearch 客户端等)是在应用程序启动时实例化单个实例并在所有线程中共享它。它应该只在应用程序关闭时关闭。

于 2016-03-24T03:33:55.087 回答