Kafka请求基于Java NIO,实现了Reactor模式,具体流程如图。
- broker 的
Acceptor
线程接收客户端或者其他 broker 的请求; Acceptor
线程接收到请求之后创建SocketChannel
;- 把
SocketChannel
对象放入Processor
线程的newConnetions
队列中; Processor
线程从newConnetions
队列中取出ScoketChannel
对象,封装成RequestChannel
对象;- 把
RequestChannel
对象放入请求队列RequestQueue
中; - 由
KafkaRequestHandler
(I/O线程)执行从RequestQueue
中拉取请求; - 拉取到的请求由
KafkaApis
执行请求处理逻辑; - 将请求响应
Response
放入Processor
线程的响应队列ResponseQueue
中; - 由
Processor
线程将请求响应返回给客户端或者其他 broker。