0

我无法在kafkajs 文档或浏览官方 Apache Kafka设计文档中找到答案,但在他们的producer示例中,producer发送消息后断开连接。但是,这可能是因为它只是一个微不足道的例子,而不是一个长期运行的过程。

对于长时间运行的应用程序,如网络应用程序,我想知道在发送消息后断开与生产者的连接是否更好,或者(可能)在运行的应用程序的整个生命周期中保持连接打开更好。

保持连接打开的一个明显优点是它在发送消息时不会重新连接,一个明显的缺点是它保持 TCP 连接打开。我也不知道有多大的优势或劣势。

我的猜测是它取决于预期的数量。如果应用程序要不断发送消息,最好保持连接打开,而如果不经常发送消息,则发送消息后断开连接是合适的。

这是一个准确的评估吗?我更想知道我是否遗漏了细微差别或做出了错误的假设。

4

1 回答 1

2

It is recommended to have producer open for the scope of the application. Only if you have it open you can leverage the properties like batch.size and linger.ms to improve the throughput of your application.

Even for less busy applications it's better to have a producer instance shared in your application.

However if you're looking to enable transactions, you might want to consider implementing a pool of producer instances.

Although KafkaProducer is thread-safe, it does not support multiple concurrent transactions, so if you want to run different transactions concurrently, it's recommended to have separate producer instances.

于 2020-12-18T22:07:02.303 回答