Kafka Producer:发送消息后断开连接与保持连接打开

Kafka Producer: Disconnect after sending message vs keeping connection open

我无法在 kafkajs docs or from skimming through the official Apache Kafka design docs 中找到这个问题的答案,但在他们的 producer 示例中,producer 在发送消息后断开连接。但是,这可能是因为这是一个微不足道的例子,而不是一个漫长的 运行 过程。

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

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

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

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

申请范围建议producer开放。 只有打开它,您才能利用 batch.sizelinger.ms 等属性来提高应用程序的吞吐量。

即使是不太繁忙的应用程序,也最好在您的应用程序中共享一个生产者实例。

但是,如果您希望启用事务,则可能需要考虑实施生产者实例池。

虽然KafkaProducer是线程安全的,但是不支持多并发事务,所以如果你想运行并发不同的事务,建议有单独的producer实例。