Kafka核心技术与实战——24 | 请求是怎么被处理的?

  • 无论是 Kafka 客户端还是 Broker 端,它们之间的交互都是通过“请求 / 响应”的方式完成的
    • Apache Kafka 自己定义了一组请求协议,用于实现各种各样的交互操作
    • 比如常见的 PRODUCE 请求是用于生产消息的,FETCH 请求是用于消费消息的,METADATA 请求是用于请求 Kafka 集群元数据信息的
    • 所有的请求都是通过 TCP 网络以 Socket 的方式进行通讯的
  • 常见请求处理方案
    • 1、顺序处理请求。
      • 吞吐量太差。由于只能顺序处理每个请求,因此,每个请求都必须等待前一个请求处理完毕才能得到处理
      • 这种方式只适用于请求发送非常不频繁的系统
    • 2. 每个请求使用单独线程处理
      • 为每个入站请求都创建一个新的线程来异步处理
      • 为每个请求都创建线程的做法开销极大,在某些场景下甚至会压垮整个服务。还是那句话,这个方法只适用于请求发送频率很低的业务场景
  • Kafka 使用的是Reactor 模式
    • Reactor 模式是事件驱动架构的一种实现方式,特别适合应用于处理多个客户端并发向服务器端发送请求的场景
    • 在这个架构中,Acceptor 线程只是用于请求分发,不涉及具体的逻辑处理,非常得轻量级,因此有很高的吞吐量表现。而这些工作线程可以根据实际业务处理需要任意增减,从而动态调节系统负载能力
  • 小结
    • Kafka Broker 请求处理流程的解析应该讲得比较完整了。明确请求处理过程的最大意义在于,它是你日后执行 Kafka 性能优化的前提条件
posted @ 2020-05-29 11:06  怡情养性长智  阅读(193)  评论(0编辑  收藏  举报