Kakfa揭秘 Day5 SocketServer下的NIO

Kakfa揭秘 Day5

SocketServer下的NIO

整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的优势,而socketServer就是其中的代表。

今天会分析下socketServer,分析下其中三个核心对象 acceptor、processor、handler

概述

首先让我们看下socketServer的说明:
Snip20160630_80

这是一个采用Java NIO开发的socket Server,有一个acceptor线程去处理新的连接请求,一个acceptor会接收很多客户的连接请求,里面有N个processor提供并发度,每个processor依附一个线程,线程里有自己的selector,会读取NIO socket通讯的请求,交给handler处理,handler处理完成后把结果返回给客户端。

从在构造方法,也可以看到,生成了一个acceptor和n个processor。
Snip20160630_81

Acceptor

Acceptor 继承自AbstractServerThread,是个Runnable对象,在接收客户端请求后,会交给processor来进行处理。
Snip20160630_82

关键是run方法,如果有连接进来的话,会分配processor进行处理,分配算法用的是round robin的方式。

Snip20160630_85

Acceptor主要是会建立一个ServerSocketChannel,当select方法返回时,就表示注册的事件发生了。
Snip20160630_86

Processor

processor的作用相当于一个路由器。
Snip20160630_87

在run时不断循环,读取客户端的数据,就是一个消息循环器的多线程编程,具体的操作是交给handler的。
Snip20160630_88

processor读取完数据之后,会封装为一个request对象,发送到queue中,

Snip20160630_91

如果queue满了的话,handler会从request queue获取数据,进行处理。
Snip20160630_89

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

原文地址:https://www.cnblogs.com/dt-zhw/p/5631103.html