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处理结束。

发表评论

邮箱地址不会被公开。 必填项已用*标注