kafka Broker请求处理

所有的请求都是通过 TCP 网络以 Socket 的方式进行通讯的。

Kafka 使用的是 Reactor 模式处理请求。

Reactor 模式是事件驱动架构的一种实现方式,特别适合应用于处理多个客户端并发向服务器端发送请求的场景。多个客户端会发送请求给到 Reactor。Reactor 有个请求分发线程 Dispatcher,它会将不同的请求下发到多个工作线程中处理。工作线程可以根据实际业务处理需要任意增减,从而动态调节系统负载能力。

Kafka 提供了 Broker 端参数 num.network.threads,用于调整该网络线程池的线程数。其默认值是 3,表示每台 Broker 启动时会创建 3 个网络线程,专门处理客户端发送的请求。

当网络线程拿到请求后,它不是自己处理,而是将请求放入到一个共享请求队列中。Broker 端还有个 IO 线程池,负责从该队列中取出请求,执行真正的处理–如果是 PRODUCE 生产请求,则将消息写入到底层的磁盘日志中;如果是 FETCH 请求,则从磁盘或页缓存中读取消息。

Broker 端参数 num.io.threads 控制了IO线程池中的线程数。默认值是 8,表示每台 Broker 启动后自动创建 8 个 IO 线程处理请求。

Purgatory

缓存延时请求(Delayed Request),针对一时未满足条件不能立刻处理的请求。

比如设置了 acks=all 的 PRODUCE 请求,一旦设置了 acks=all,那么该请求就必须等待 ISR 中所有副本都接收了消息后才能返回,此时处理该请求的 IO 线程就必须等待其他 Broker 的写入结果。当请求不能立刻处理时,它就会暂存在 Purgatory 中。一旦完成,IO 线程会继续处理该请求,并将 Response 放入对应网络线程的响应队列中。


   转载规则


《kafka Broker请求处理》 wangyixin-tom 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Kafka控制器 Kafka控制器
控制器组件(Controller),是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。每个正常运转的 Kafka 集群,在任意时刻都有且只有一个控制器。
2021-03-28
下一篇 
kafka副本 kafka副本
主题可划分成若干个分,每个分区配置有若干个副本。副本(Replica),本质是一个只能追加写消息的提交日志。 副本分类副本分成两类:领导者副本(Leader Replica)和追随者副本(Follower Replica)。每个分区在创建时
2021-03-28
  目录