kafka 的network

本文探讨了Kafka服务器如何使用NIO进行网络通信。在初始化Zookeeper连接和加载Topic信息后,Kafka进入IO处理阶段。通过单线程Acceptor处理所有连接,多个线程异步处理这些连接。文章详细分析了Acceptor和Processor的实现,并强调了解Java NIO对于理解这部分至关重要。Processor维护了一个新的连接队列,用于存储SocketChannel对象,处理来自selector的事件。在读取过程中,将消息封装到MessageSetSend中返回给客户端,揭示了Kafka在网络通信中的高效策略。
摘要由CSDN通过智能技术生成

好了 , 接着上一章 , 我们回到kafka的 kafkaserver 这个重量级的类。

 

      val handlers = new KafkaRequestHandlers(logManager)
    socketServer = new SocketServer(config.port,
                                    config.numThreads,
                                    config.monitoringPeriodSecs,
                                    handlers.handlerFor,
                                    config.socketSendBuffer,
                                    config.socketReceiveBuffer,                                    
                                    config.maxSocketRequestSize)

 在初始化zk连接, 加载topic信息之后。kafka开始跟做一些io的东西。个人对这部分还是很感兴趣的。让我们点进去看一看。 

注释写的很精彩啊:

/**
 * An NIO socket server. The thread model is
 *   1 Acceptor thread that handles new connections
 *   N Processor threads that each have their own selectors and handle all requests from their connections synchronously
 */

 他都已经说了,这是 NIO 线程模型是 单线程负责处理所以的连接。n个线程异步处理这些连接。

 

从这个注释入手,我们看一看 Acceptor 和 Processor 是如何实现的。

 

/**
 * Thread that accepts and configures new connections. There is only need for one of these
 */
private[kafka] class Acceptor(val port: Int, private val processors: Array[Processor], val sendBufferSize: Int, val receiveBufferSize: Int) extends AbstractServerThread {

  /**
   * Accept loop that checks for new connec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值