(四) kafka服务端网络通信模型
概述:kafka基于nio自行研发了一套网络通信模型,没有使用类似netty的网络框架作为通信的底座。
reactor设计模式:该框架根据不同网络事件,把后台线程分为不同角色,如op_accept事件对应的角色是accpector线程,op_read/op_write事件对应的则是processor线程。
-
各线程组具体职责
- acceptor:负责op_accept事件,将配置好的连接存入对应的processor线程的newConnections。
- newConnections:每个processor线程都有一个对应的newConnections,负责接收accpetor配置的连接。
- processor:负责网络读写,从newConnections获取链接后注册到自己的selector,最后循环处理数据。
- requestQueue:多个processor线程共有的,数据处理完毕后写入requestQueue。
- handlerPool:业务处理线程池,从requestQueue线程拉取数据并进行处理。
- responseQueue:handler处理完成后写入对应processor的responseQueue,由processor线程拉取结果并发送。
-
整体工作流程
- kafka server启动后初始化网络模块,每监听一个端口就初始化对应的accpetor(默认1个)和processor(默认3个);
- acceptor是三次握手后初始化连接信息,将配置好的连接找到对应的newConnections;
- processor从自己对应的newConnections中poll出accpetor配置好的连接,注册到自己的selector中以完成读写网络事件;
- processor将读取到的数据放入requestQueue,等待handlerPool(默认8个线程)拉取进行业务逻辑处理;
- handler处理完根据processor id给到具体的responseQueue,最后由processor通过socketChannel写回数据。