gpt4 book ai didi

scala - kafka-clients scala 库如何管理 TCP 连接?

转载 作者:可可西里 更新时间:2023-11-01 02:33:17 24 4
gpt4 key购买 nike

我正在使用 kafka-clients用于将 Kafka 与 Scala 应用程序集成的库。并且发现很难理解代理人和生产者/消费者之间如何以及何时建立 TCP 连接。

请验证我对以下几点的理解-

(1) KafkaProducer实例初始化时没有建立TCP连接。

val producer = new KafkaProducer[String, String](properties)

这也适用于 KafkaConsumer。

val consumer = new KafkaConsumer[String, String](properties)

(2) 第一个 TCP 连接(在 Broker 和 Producer 之间)是在向 Broker 生成记录时建立的。

producer.send(record1)

(3) 从同一个生产者到同一个代理的后续 send() 调用将共享同一个 TCP 连接,而不管主题如何。

producer.send(record2)

(4) 在消费者的情况下,第一个 TCP 连接是在轮询主题(而不是订阅)时建立的。

val records = consumer.poll(timeout)

(5) 同一 Consumer 对同一 Broker 的后续轮询调用共享同一连接。

最佳答案

No TCP connection is established on initialisation of KafkaProducer instance.

不完全是。 KafkaProducer 初始化将从多个 TCP 连接中启动 Sender 线程,以建立所有引导服务器。这些套接字将用于从集群中检索元数据。

First TCP connection (between Broker and Producer) is established on producing a record to Broker.

几乎正确。实际上,客户端总是创建到代理的多个 TCP 连接。当您只有一个经纪人时,情况更是如此。对于producer来说,往往会创建两个connection,一个用于更新Metadata,一个用于发送消息。对于消费者(假设您使用的是消费者组),它似乎会创建 3 个连接。一个用于寻找协调员;一个用于组管理(包括加入/同步组和偏移量);一个用于检索偏移量,最后一个用于拉取消息。
更新:消费者创建了 3 个连接,而不是我之前声称的 4 个。感谢@ppatierno 的提醒。

Subsequent send() calls from the same Producer to same Broker will share same TCP connection irrespective of the Topic.

后续发送调用重用生产者创建的第二个连接。

In case of Consumer, first TCP connection is established on polling a Topic (not on Subscription).

是的,所有连接都在 poll 调用中创建。

Subsequent calls to poll by the same Consumer to the same Broker share the same connection.

对轮询的后续调用会重用消费者创建的最后一个连接。

关于scala - kafka-clients scala 库如何管理 TCP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47936073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com