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

46 阅读1分钟

无论是Kafka的客户端还是Broker端, 它们之间的交互都是通过“请求/响应”的方式完成的.

Apache Kafka自己定义了一组请求协议, 用户实现各种各样的交互操作. 比如PRODUCE请求是用于生产消息的, FETCH请求是用于消费消息的, METADATA请求是用于请求Kafka集群元数据信息的.

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

处理请求的2种常见方式

  1. 顺序处理请求, 有个致命的缺陷, 就是吞吐量太差. 只能顺序处理请求, 因此每个请求都必须等待前一个请求处理完毕才能得到处理. 这种方式只适用于请求发送非常不频繁的系统.

  2. 每个请求使用单独线程处理. 采用完全异步的方式. 缺陷是, 为每个请求创建线程的做法开销极大, 在某些场景甚至会压垮整个服务.

既然这两种方式都不是很友好, 那么Kafka是如何处理请求的呢? 一句话来概括就是, Kafka使用的是Reactor模式.

Kafka是如何处理请求的?

Reactor模式, 简单来说, Reactor模式是事件驱动架构的一种实现方式, 特别适合应用于处理多个客户端并发向服务端发送请求的场景.

Reactor模式架构图: image.png

Kafka类似的图 image.png

image.png

此文章为3月Day20学习笔记, 内容来源于极客时间《Kafka核心技术与实战》, 强烈推荐该课