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