标签:协调者 Broker TCP 通信 关闭 Kafka 连接
Kafka基于TCP进行通信
Apache Kafka 的所有通信都是基于 TCP 的,无论是生产者、消费者,还是 Broker 之间的通信都是如此。
生产者端的TCP管理
-
何时建立TCP连接
-
在创建 KafkaProducer 实例时,生产者应用会在后台创建并启动一个名为 Sender 的线程,该 Sender 线程开始运行时首先会创建与 Broker 的连接(即使没有调用
#send
方法)。具体来说,是Producer端的
bootstrap.servers
参数,指定了需要在启动时建立TCP连接的Broker地址,一般推荐设置3~5个为宜,不用全部设置,事实上只要和其中一个Broker建立了TCP连接,当前Producer是能够获取到集群所有Broker的信息的。 -
消息发送时,如果发现与某些Broker没有建立TCP连接,会建立TCP连接。
-
更新集群元数据信息时也会建立TCP连接(比如Topic不存在时会发送METADATA请求给Kafka集群获取最新元数据信息)
-
-
何时关闭TCP连接
- 用户主动关闭。(比如kill -9 或者调用close方法)
- Kafka自动关闭,对应Producer 端参数
connections.max.idle.ms
。默认情况下该参数值是 9 分钟,即如果在 9 分钟内没有任何请求“流过”某个 TCP 连接,那么 Kafka 会主动帮你把该 TCP 连接关闭。注意,这个关闭是Broker端发起,Producer属于passive close(被动关闭),被动关闭的后果就是会产生大量的 CLOSE_WAIT 连接,因此 Producer 端或 Client 端没有机会显式地观测到此连接已被中断。
消费者端的TCP管理
-
何时建立TCP连接
-
在调用
KafkaConsumer.poll
方法时被创建TCP连接。具体来说是围绕协调者进行的交互:
- 发起 FindCoordinator 请求时。向Broker端发起 FindCoordinator 请求(建立TCP连接),寻找协调者所在Broker。
- 连接协调者时。确定协调者所在Broker,建立TCP连接
- 消费数据时。协调者分配好当前消费者消费的分区后,消费者需要与这些分区领导者副本所在的Broker建立TCP连接。
-
-
何时关闭TCP连接
- 用户主动关闭。(比如kill -9 或者调用close方法)
- Kafka自动关闭,对应消费者端参数
connection.max.idle.ms
。默认情况下该参数值是 9 分钟,即如果在 9 分钟内没有任何请求“流过”某个 TCP 连接,消费者会强行“杀掉”这个 Socket 连接。
标签:协调者,Broker,TCP,通信,关闭,Kafka,连接 来源: https://www.cnblogs.com/shix0909/p/16579555.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。