0%

kafka之网络通信

网络通信

kafkaServer启动时,初始化启动了一个SocketServer服务,用于接受客户端的连接、处理客户端请求、发送响应等,同时创建一个KafkaRequestHandlerPool用于管理KafkaRequestHandler。SocketServer是基于Java NIO实现的网络通信组件,线程模型为:一个Acceptor线程负责接收客户端所有的连接;{num.network.threads}个Processor线程,每个Processor有多个Selector,负责从每个连接中读取请求;{num.io.threads}个Handler线程处理请求,并将产生的请求返回给Processor线程。Handler是由KafkaRequestHandlerPool管理,在Processor和Handler之间通过RequestChannel来缓冲请求,每个Handler从RequestChannel.requestQueue接受RequestChannel.Request,并把Request交由KafkaApis的handle()方法处理,经处理后把对应的Response存进RequestChannel.responseQueues队列

Acceptor

监听并接受客户端的请求,建立和客户端的数据传输通道ServerSocketChannel,然后为客户端制定一个Processor

Processor

用于从客户端读取请求数据和将相应的响应结果返回给客户端。

RequestChannel

为了给Processor线程与Handler线程之间通信提供数据缓冲,是通信过程中Request与Response缓存的通道,是Processor与Handler线程交换数据的地方。