为何采用 TCP?
1.在开发客户端时,人们能够利用 TCP 本身提供的一些高级功能,比如多路复用请求以及同时轮询多个连接的能力。
所谓的多路复用请求,即 multiplexing request,是指将两个或多个数据流合并到底层单一物理连接中的过程。TCP 的多路复用请求会在一条物理连接上创建若干个虚拟连接,每个虚拟连接负责流转各自对应的数据流。其实严格来说,TCP 并不能多路复用,它只是提供可靠的消息交付语义保证,比如自动重传丢失的报文。
更严谨地说,作为一个基于报文的协议,TCP 能够被用于多路复用连接场景的前提是,上层的应用协议(比如 HTTP)允许发送多条消息。
2.目前已知的 HTTP 库在很多编程语言中都略显简陋。
基于这两个原因,Kafka 社区决定采用 TCP 协议作为所有请求通信的底层协议。
何时创建 TCP 连接?
在创建 KafkaProducer 实例时,生产者应用会在后台创建并启动一个名为 Sender 的线程,该 Sender 线程开始运行时首先会创建与 Broker 的连接。
此时还没有调用 send 方法,这个 Producer 都不知道给哪个主题发消息,它会连接 bootstrap.servers 参数指定的所有 Broker 。
bootstrap.servers 是 Producer 的核心参数之一,指定了这个 Producer 启动时要连接的 Broker 地址。
如果你为这个参数指定了 1000 个 Broker 连接信息,那么你的 Producer 启动时会首先创建与这 1000 个 Broker 的 TCP 连接。
在实际使用过程中,我并