是保持 Kafka Producer 打开还是为每条消息创建一个新的更好?

Is it better to keep a Kafka Producer open or to create a new one for each message?

我有通过 RabbitMQ 传入的数据。数据不断传入,每秒多条消息。 我需要将该数据转发给 Kafka。

在我从 RabbitMQ 获取数据的 RabbitMQ 传递回调中,我有一个 Kafka 生产者,它会立即将收到的消息发送到 Kafka。 我的问题很简单。是在回调方法之外创建一个 Kafka 生产者并将该生产者用于所有消息更好,还是我应该在回调方法内创建生产者并在消息发送后关闭它,这意味着我正在为创建一个新的生产者每条消息?

这可能是一个天真的问题,但我是 Kafka 的新手,到目前为止我还没有在互联网上找到明确的答案。

编辑:我正在使用 Java Kafka 客户端。

创建 Kafka 生产者是一项昂贵的操作,因此考虑到性能和利用资源,将 Kafka 生产者用作单例是一个很好的做法。

对于 Java 客户,这是来自文档:

The producer is thread safe and should generally be shared among all threads for best performance.

对于基于 librdkafka 的客户端(confluent-dotnet、confluent-python 等),我可以 link this 相关问题引用此问题:

Yes, creating a singleton service like that is a good pattern. you definitely should not create a producer each time you want to produce a message - it is approximately 500,000 times less efficient.

Kafka 生产者是有状态的。它包含元信息(从代理定期同步),发送消息缓冲区等。因此为每条消息创建生产者是不切实际的。