无论是Kafka的客户端还是Broker端, 它们之间的交互都是通过“请求/响应”的方式完成的.
Apache Kafka自己定义了一组请求协议, 用户实现各种各样的交互操作. 比如PRODUCE请求是用于生产消息的, FETCH请求是用于消费消息的, METADATA请求是用于请求Kafka集群元数据信息的.
所有的请求都是通过TCP网络以及Socket的方式进行通讯的.
处理请求的2种常见方式
-
顺序处理请求, 有个致命的缺陷, 就是吞吐量太差. 只能顺序处理请求, 因此每个请求都必须等待前一个请求处理完毕才能得到处理. 这种方式只适用于请求发送非常不频繁的系统.
-
每个请求使用单独线程处理. 采用完全异步的方式. 缺陷是, 为每个请求创建线程的做法开销极大, 在某些场景甚至会压垮整个服务.
既然这两种方式都不是很友好, 那么Kafka是如何处理请求的呢? 一句话来概括就是, Kafka使用的是Reactor模式.
Kafka是如何处理请求的?
Reactor模式, 简单来说, Reactor模式是事件驱动架构的一种实现方式, 特别适合应用于处理多个客户端并发向服务端发送请求的场景.
Reactor模式架构图:
Kafka类似的图
此文章为3月Day20学习笔记, 内容来源于极客时间《Kafka核心技术与实战》, 强烈推荐该课