zoukankan      html  css  js  c++  java
  • 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 放入对应网络线程的响应队列中。

    • 相关阅读:
      蓝桥杯-带分数
      蓝桥杯-分红酒
      蓝桥杯-猜算式
      hdu2045不容易系列之(3)—— LELE的RPG难题
      蓝桥杯-奇怪的比赛
      linux应用之perl环境的安装(centos)
      linux应用之php开发环境lamp搭建(centos)
      linux应用之yum命令详解
      linux应用之用户管理相关命令
      linux应用之mysql数据库指定版本的yum安装(centos)
    • 原文地址:https://www.cnblogs.com/hainingwyx/p/14612595.html
    Copyright © 2011-2022 走看看