Broker的请求处理
Kafka的处理模式是Reactor的设计模式,方便处理多个输入源过来的请求
Reactor中分为了服务处理器和分发器以及实际的请求
Broker的主要组成组件acceptor线程和processor线程,
每个broker包含一个acceptor线程和多个processor线程,processor线程的数量是可以配置的,根据num.network.threads来进行管理。
Broker端的acceptor负责监听入站链接,当一个client请求建立连接的请求到了
就会将这个新建立的socket通道交给processor管理
Processor利用了selector机制来管理其手下的socket链接。
当有具体请求到来,processor就会将请求放入到一个具体的请求队列中,交给内部一个叫做KafkaRequsetHandler线程池来进行处理,这个 线程池大小由 num.io.threads来进行控制
然后处理完成之后,放给processor管理的一个响应队列,让processor发送出去。
后续的client和broker的交互就直接交给这个processor来做。
更加具体的流程,我们可以假设broker id为B1,client id 为 C1
首先是acceptor线程A
启动三个processor P1 P2 P3
然后启动一个’ KafkaRequsetHandler线程池
之后A轮询是否有新连接,P1,P2,P3轮训A是否有需要处理的新连接,
然后C1去发送数据,建立新的Socket
A监听到Socket数据,接收后交给P1-P3中的一个,假设P1
P1收到了新的请求,然后放给请求队列中,交给KafkaRequsetHandler线程池处理
处理完成放到P1的相应队列
P1通过Socket发给C1
C1收到响应,本次PRODUCE处理结束。