Kakfa揭秘 Day5
SocketServer下的NIO
整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的优势,而socketServer就是其中的代表。
今天会分析下socketServer,分析下其中三个核心对象 acceptor、processor、handler
概述
首先让我们看下socketServer的说明:
这是一个采用Java NIO开发的socket Server,有一个acceptor线程去处理新的连接请求,一个acceptor会接收很多客户的连接请求,里面有N个processor提供并发度,每个processor依附一个线程,线程里有自己的selector,会读取NIO socket通讯的请求,交给handler处理,handler处理完成后把结果返回给客户端。
从在构造方法,也可以看到,生成了一个acceptor和n个processor。
Acceptor
Acceptor 继承自AbstractServerThread,是个Runnable对象,在接收客户端请求后,会交给processor来进行处理。
关键是run方法,如果有连接进来的话,会分配processor进行处理,分配算法用的是round robin的方式。
Acceptor主要是会建立一个ServerSocketChannel,当select方法返回时,就表示注册的事件发生了。
Processor
processor的作用相当于一个路由器。
在run时不断循环,读取客户端的数据,就是一个消息循环器的多线程编程,具体的操作是交给handler的。
processor读取完数据之后,会封装为一个request对象,发送到queue中,
如果queue满了的话,handler会从request queue获取数据,进行处理。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580