【问题标题】:Is it better to keep a Kafka Producer open or to create a new one for each message?保持 Kafka Producer 处于打开状态还是为每条消息创建一个新的 Producer 更好?
【发布时间】:2021-04-13 10:10:28
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您使用的是哪个 Kafka 客户端,Java、.NET、Go 等?
  • @ndogac 我正在使用 Java。愚蠢的事情忘记提及..

标签: apache-kafka rabbitmq kafka-producer-api


【解决方案1】:

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

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

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

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

是的,创建这样的单例服务是一个很好的模式。您绝对不应该在每次想要生成消息时都创建生产者 - 它的效率大约低 500,000 倍。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 1970-01-01
      • 2019-02-23
      • 2013-07-22
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多