kafka是怎么处理请求的

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yujianping_123/article/details/98613333

kafka请求,分2大类:

1. 控制类请求:执行特定的kafka内部动作的,比如更新leader和follower副本,leaderAndlsr请求和stopReplica请求。

2. 数据类请求:生产和消费请求,有 produce 和fetch请求。

控制类请求的优先级高于数据类请求。

处理流程如下:

1. 客户端(包括ZK,Broker,clients)把请求发到Broker上,SocketServer组件的Acceptor线程接收请求。

2. Acceptor线程:采用轮询的方式将进站请求公平的发送到所有网络线程中。

3. 网络线程池: 拿到请求后,放入到共享请求队列中。同时,网络线程池的响应队列接收IO线程处理后的response,然后由对应的网络线程把response返还给客户端。

    网络线程池默认大小是3,即num.network.threads=3,表示每台Broker启动时会创建3个网络线程。

4. IO线程池:从共享请求队列中取出请求,并且执行。如果是控制类请求,执行相应的处理。如果是produce,则把消息写入到底层的磁盘日志中,如果是fetch,则从磁盘或cache中读取消息。当io线程处理完请求,会将生成的response发送到网络线程池的响应队列中。

     IO线程池默认大小是8,即num.io.threads=8,表示每台Broker启动时会创建8个IO线程。

扫描二维码关注公众号,回复: 7196457 查看本文章

5.purgatory组件:缓存滞后延时的请求。

猜你喜欢

转载自blog.csdn.net/yujianping_123/article/details/98613333